我正在编写一个类似于MyClass() << "some args here" << ...;
的类,并将这些值转发给它内部保存的常规ostream
。
这似乎有效:
class MyClass {
std::ostringstream oss;
public:
template<typename T>
MyClass& operator<<(T&& val) {
oss << std::forward<T>(val);
return *this;
}
~MyClass() {
std::cout << "Final result: " << oss.str() << std::endl;
}
};
我使用T&&
和std::forward<T>
,因为我过去常常使用perfect forwarding看到它们。
然而,这也有效:
template<typename T>
MyClass& operator<<(T val) {
oss << val;
return *this;
}
&#34;完美转发&#34;实际需要吗?我无法为简化版本构建一个反例,无论T的可用operator<<
是通过值还是通过引用获取它。