在C ++中,使用运算符<<构造函数的输入

时间:2011-04-10 21:27:47

标签: c++ stl stream operators operator-overloading

我希望能够编写如下代码:

int n;
std::string s = "some string";
SomeFunction("hello world" << n << " " << s << std::endl);

其中SomeFunction()是其他类的方法。关键是我希望能够使用operator&lt;&lt;构造某个方法的输入,就像在C ++中写入标准输出时那样。我怎么能这样做?

感谢。

2 个答案:

答案 0 :(得分:2)

您的第一个参数必须是重载operator<<并构建某种参数列表的自制类型。

你的课程可能包含一个ostream,并会将operator<<转发给它。

如果函数采用字符串而不是神秘的字符串构建对象,则需要将对象转换回字符串。

你可以像ostringstream这样做:

int n;
std::string s;
std::ostringstream oss;
SomeFunction( ( oss << "hello world " << n << " " << s << '\n' ).str() );

答案 1 :(得分:0)

  

谢谢,但这个解决方案太明显了。我正在寻找代码保持与样本中相同。 - Alexander Sandler 54秒前

对明显的解决方案有惊人的偏见?

如果没有您在第一条评论中描述的宏,您的语法就无法实现(通常[1])。期。

[1]在特定情况下,您可以通过重载到ostream& operator<<(std::string, myspecifictype)来强制解决问题。在实践中,这只会给你带来麻烦,因为几乎每次使用&lt;&lt;随后运算符将导致模糊的重载决策