我有一个我经常使用的宏,受到另一个问题的启发:
#define to_string(x) dynamic_cast<ostringstream &> (( ostringstream() << setprecision(4) << dec << x )).str()
这个非常方便,例如在使用字符串输入的函数时使用:
some_function(to_string("The int is " << my_int));
但是我被告知在C ++中使用宏是不好的做法,事实上我在使用不同的编译器时遇到了问题。有没有办法把它写成另一种结构,例如一个函数,它将具有相同的多功能性?
答案 0 :(得分:7)
您的宏比std::to_string
提供的可能性更多。它接受任何合理的<<
运算符序列,设置默认精度和十进制基数。兼容的方法是创建一个可隐式转换为std::ostringstream
的{{1}}包装器:
std::string
答案 1 :(得分:6)
在C ++ 11及更高版本中,我们现在有std::to_string
。我们可以使用它将数据转换为字符串,并将其附加到您想要的任何内容。
some_function("The int is " + std::to_string(my_int));
答案 2 :(得分:2)
具有讽刺意味的是,to_string
就是你想要的。
而不是:to_string("The int is " << my_int)
你可以写:"The int is " + to_string(my_int)
这将返回string
。