我想用cout在C++中创建一个函数,它和java中的println函数有相同的功能,这意味着调用应该是这样的:
int a=5 println("A string" + a);
变量a应该有任何基本类型。2在这种情况下我应该有什么样的参数?3它是如何工作的?谢谢
gopyfrb31#
正如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,我猜这个库会做你想做的事情。
gblwokeq2#
许多人投了反对票,但这并不能解释为什么你的要求是不正确的。你有两个选择:1.你可以创建一个模板化的println(T val)函数,它可以接受你喜欢的任何类型,int,double等等,你可以在这个函数中打印它们。1.不过,你在上面的要求是:这是一个返回类型的表达式,你在这里要做的是添加一个const char*和一个int,不幸的是,这不会像你期望的那样,它会做pointer arithmetic,在这个特殊的例子中甚至不会编译,但是对于一般的例子,比如一个std::string和一个叫做Foo的类,编译器将寻找能够连接这两个事物的operator+ overload。第二个选择,也是稍微危险一点的选择,是使用一个println函数,该函数接受一个std::string或const char*,并定义所有不同的operator+运算,但我不推荐这样做,因为指针和整数之间的默认运算是指针算术,这是非常有用的。我建议从一个模板函数开始,然后看看会发生什么。
println(T val)
const char*
int
std::string
Foo
operator+
println
egmofgnx3#
10年后的C++23标准库中有了println function。
#include <print> int main() { int i = 5; std::println("Hello, World {}!", i); return 0; }
由于C++23是相当新的,目前很难找到编译器支持。
3条答案
按热度按时间gopyfrb31#
正如larsmans已经指出的,java在操作符+上有重载,所以你可以将字符串与整数串接,这在C++中也是可能的,但不是所有类型都可以。
您可以使用这样的模板函数。
但是我会建议你看一看boost::format,我猜这个库会做你想做的事情。
gblwokeq2#
许多人投了反对票,但这并不能解释为什么你的要求是不正确的。
你有两个选择:
1.你可以创建一个模板化的
println(T val)
函数,它可以接受你喜欢的任何类型,int,double等等,你可以在这个函数中打印它们。1.不过,你在上面的要求是:这是一个返回类型的表达式,你在这里要做的是添加一个
const char*
和一个int
,不幸的是,这不会像你期望的那样,它会做pointer arithmetic,在这个特殊的例子中甚至不会编译,但是对于一般的例子,比如一个std::string
和一个叫做Foo
的类,编译器将寻找能够连接这两个事物的operator+
overload。第二个选择,也是稍微危险一点的选择,是使用一个
println
函数,该函数接受一个std::string
或const char*
,并定义所有不同的operator+运算,但我不推荐这样做,因为指针和整数之间的默认运算是指针算术,这是非常有用的。我建议从一个模板函数开始,然后看看会发生什么。
egmofgnx3#
10年后的C++23标准库中有了
println
function。由于C++23是相当新的,目前很难找到编译器支持。