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

In C++, using operator<< to construct input for a function

本文关键字:lt 构造函数 输入 运算符 C++      更新时间:2023-10-16

我希望能够写出这样的代码:

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

其中SomeFunction()是其他类的方法。关键是,我希望能够使用操作符<<为某些方法构造输入,就像在c++中编写标准输出时所做的那样。我该怎么做呢?

谢谢。

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

您的类可能包含ostream,并将operator<<转发给它。

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

你已经可以这样做ostringstream:

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

谢谢,但是这个解决方案太明显了。我正在寻找的代码保持相同的样本。- Alexander Sandler 54 secs ago

对显而易见的解决方案的令人惊讶的偏见?

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

[1]在特定情况下,您可以通过重载ostream& operator<<(std::string, myspecifictype)来强制解决这个问题。在实际操作中,这只会给您带来麻烦,因为几乎每次使用<<操作符随后会导致歧义的重载解析