technique/pattern cin/cout 使用什么允许例如输出 << x << y?
What technique/pattern does cin/cout use allowing e.g. cout << x << y?
在C++中,我们通常使用很多<<
操作符输出到控制台,如下所示:
cout << "x = " << x; // Output, for ex: x = 5
我又知道每个 <<
运算符 return cout
,代码应该类似于:
some_class& do_some_thing(int x) {
// process or print x
return *this;
}
但我不知道这种技术或模式叫什么,在什么情况下我们应该使用它?
是否应该在我工作中使用的其他编程语言(例如 C#)上实施此技术。
叫做Method Chaining. As an example, there's a boost library that provided a chaining way of assigning into a container before brace-initialization came around (Boost.Assignment):
vector<int> v;
v += 1,2,3,4,5,6,7,8,9;
typedef pair< string,string > str_pair;
deque<str_pair> deq;
push_front( deq )( "foo", "bar")( "boo", "far" );
不过,通常情况下,您会在其他语言中更多地看到它来做诸如提供 fluent interface 之类的事情。除了流媒体之外,我个人在 C++ 中并没有看到太多。
在C++中,我们通常使用很多<<
操作符输出到控制台,如下所示:
cout << "x = " << x; // Output, for ex: x = 5
我又知道每个 <<
运算符 return cout
,代码应该类似于:
some_class& do_some_thing(int x) {
// process or print x
return *this;
}
但我不知道这种技术或模式叫什么,在什么情况下我们应该使用它?
是否应该在我工作中使用的其他编程语言(例如 C#)上实施此技术。
叫做Method Chaining. As an example, there's a boost library that provided a chaining way of assigning into a container before brace-initialization came around (Boost.Assignment):
vector<int> v;
v += 1,2,3,4,5,6,7,8,9;
typedef pair< string,string > str_pair;
deque<str_pair> deq;
push_front( deq )( "foo", "bar")( "boo", "far" );
不过,通常情况下,您会在其他语言中更多地看到它来做诸如提供 fluent interface 之类的事情。除了流媒体之外,我个人在 C++ 中并没有看到太多。