我需要T&&和std :: forward在写一个模板化的`<<``运算符时?

时间:2016-12-02 00:33:32

标签: c++ c++11 perfect-forwarding

我正在编写一个类似于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<<是通过值还是通过引用获取它。

0 个答案:

没有答案