C ++重载运算符<<除了ostream以外的东西

时间:2013-10-30 13:13:32

标签: c++ list templates operator-keyword

我试图在课程作品上展示多样性,并希望使用<<运算符可以轻松地将变量添加到列表中。例如:

UpdateList<string> test;
test << "one" << "two" << "three";

我的问题是&lt;&lt;&lt;&lt;&lt;&lt;&lt;&lt;&lt;&lt;运算符与ostream有关。

我目前的尝试是:

template <class T> class UpdateList
{
     ...ect...

     UpdateList<T>& operator <<(T &value)
     {
          return out;
     }
}

有谁知道我是如何实现这一目标的,或者在C ++中实际上是不可能的?

3 个答案:

答案 0 :(得分:6)

您应该使用const T& value。 以下代码片段应该可以正常工作

UpdateList<T>& operator << (const T& value)
{
   // push to list
   return *this;
}

UpdateList<T>& operator << (T value)
{
   // push to list
   return *this;
}

在C ++ 11中(感谢 rightfold

答案 1 :(得分:1)

您(通常)希望将其声明为非类成员:

template<typename T>
UpdateList<T>& operator<<(UpdateList<T>& lst, const T& value)
{
    lst.add(value); // whatever your add/insert method is goes here
    return lst;
}

答案 2 :(得分:1)

您需要在课堂外重载operator<<()

template<typename T>
UpdateList<T>& operator<<(UpdateList<T>& out, const T& value)
{
    return out;
}