如何序列化模板类

时间:2014-02-27 16:48:47

标签: c++ templates serialization

我正在对遗留代码执行一些后台维护。

它涉及用STL替换已弃用的库并进行提升,同时保持界面与人类尽可能相似。

ostream& operator<<(ostream& vos, const OurList<class T>& coll)
{
    // OurList wraps an stl list with the same interface as the current library
    // OurListIterator wraps an iterator class used to access OurList

    OurListIterator<T, OurList<class T> > iter((OurList<class T>&)coll);

    // this function gets the first item in the list and then each next one
    while (iter())
    {
        // key returns the value pointed to by the iterator
        vos << iter.key();
    }
};

但是,当我编译它时,我在vos&lt;&lt; iter.key()行:

  

二进制'&lt;&lt;' :没有找到哪个操作符的右侧操作数   输入'T'(或没有可接受的转换)

我猜测编译器正在抱怨,因为它事先不知道T是否可以序列化?但是,这适用于当前的库 - 我错过了什么吗?

1 个答案:

答案 0 :(得分:2)

您可以尝试:(template <typename T>已添加,class已删除。

template <typename T>
ostream& operator<<(ostream& vos, const OurList<T>& coll)
{
    // OurList wraps an stl list with the same interface as the current library
    // OurListIterator wraps an iterator class used to access OurList

    OurListIterator<T, OurList<T> > iter((OurList<T>&)coll);

    // this function gets the first item in the list and then each next one
    while (iter())
    {
        // key returns the value pointed to by the iterator
        vos << iter.key();
    }
}