将c ++宏重写为函数等

时间:2015-10-22 11:49:53

标签: c++ function macros conventions

我有一个我经常使用的宏,受到另一个问题的启发:

#define to_string(x) dynamic_cast<ostringstream &> (( ostringstream() << setprecision(4) << dec << x )).str()

这个非常方便,例如在使用字符串输入的函数时使用:

some_function(to_string("The int is " << my_int));

但是我被告知在C ++中使用宏是不好的做法,事实上我在使用不同的编译器时遇到了问题。有没有办法把它写成另一种结构,例如一个函数,它将具有相同的多功能性?

3 个答案:

答案 0 :(得分:7)

您的宏比std::to_string提供的可能性更多。它接受任何合理的<<运算符序列,设置默认精度和十进制基数。兼容的方法是创建一个可隐式转换为std::ostringstream的{​​{1}}包装器:

std::string

直播:http://coliru.stacked-crooked.com/a/14515cabae729875

答案 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

[Live Example]