6

我想使用 cout 在 C++ 中创建一个与 java 中的 println 函数相同的函数。这意味着调用应该是这样的:

int a=5
println("A string" + a);

变量 a 应该具有任何基本类型。在这种情况下我应该有什么样的参数,它是如何工作的?

谢谢

4

2 回答 2

7

正如 larsmans 已经指出的那样,java 在运算符 + 上有重载。所以你可以用整数连接字符串。这在 C++ 中也是可能的,但并非对所有类型都是开箱即用的。

您可以使用这样的模板化函数。

#include <iostream>
using namespace std;

template <typename T>
void printer(T t) 
{ 
    cout << t << endl;
}

template <typename T, typename ...U>
void printer(T t, U ...u)
{
  cout << t;
  printer(u...);
}


int main()
{
  int a=5;
  printer("A string ", a);
  return 0;
}

但我建议看一下boost::format。我想这个图书馆会做你想做的事。

于 2013-04-18T14:02:23.953 回答
2

许多人投反对票,但这并不能解释为什么您的要求不正确。

您在这里有两个选择:

  1. 您可以制作一个模板化println(T val)函数,该函数采用您喜欢的任何类型、整数、双精度数等,并且您可以在该函数中打印它们。

  2. 但是,您在那里要求的是:"A string" + a这是一个将返回类型的表达式。你在这里做的是添加一个const char*和一个int。不幸的是,这不会像你期望的那样做任何事情,它会做指针算术,在这种特殊情况下甚至不会编译。但是对于一般情况,比如说 astd::string和一个名为 的类Foo,编译器会寻找一个可以连接这两个东西的operator+重载。

    您的第二个选择,但稍微危险一点,是拥有一个println函数,该函数采用std::stringorconst char*并定义您可能想要的所有不同的 operator+ 操作。不过我不推荐这样做,因为指针和整数之间的默认操作是进行指针运算,这非常有用。

我建议从模板函数开始,然后看看会发生什么。

于 2013-04-18T13:56:13.373 回答