我希望能够编写如下代码:
int n;
std::string s = "some string";
SomeFunction("hello world" << n << " " << s << std::endl);
其中SomeFunction()是其他类的方法。关键是我希望能够使用operator&lt;&lt;构造某个方法的输入,就像在C ++中写入标准输出时那样。我怎么能这样做?
感谢。
答案 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;随后运算符将导致模糊的重载决策