模板类和重载<<操作者

时间:2014-10-26 15:01:15

标签: c++ templates bind overloading operator-keyword

我正在尝试重载<<某些模板类的运算符

#include <iostream>
#include <iterator>
#include <map>

template <typename T1, typename T2>
class SampleClass {

public:
    SampleClass() = default;

    void Add(const T1 &key, const T2 &value)
    {
        database[key] = value;
    }

    typename std::map<T1, T2>::const_iterator cbegin() const { return database.cbegin(); }
    typename std::map<T1, T2>::const_iterator cend() const { return database.cend(); }


private:
    std::map<T1, T2> database;
};

template <typename T1, typename T2> 
std::ostream &operator << (std::ostream &os, SampleClass<T1, T2> &rhs)
{
    for(auto el = rhs.cbegin(); el != rhs.cend(); el++)
        os << el->first << " " << el->second << std::endl;
    return os;
}

我从g ++获得的错误

error: cannot bind ‘std::basic_ostream<char>’ lvalue to ‘std::basic_ostream<char>&&’
    os << el->first << " " << el->second << std::endl;

我还尝试将此运算符声明为内联友元函数,但结果同样也不起作用。谁能向我解释为什么会发生?

更新: 问题是编译器没有告诉我,我用作SampleClass值的cass没有重载&lt;&lt;运营商。我还在寻找SampleClass,而不是检查其他文件。但是多亏了你告诉我,对于内置类型,一切都很好,我意识到需要检查什么。谢谢,抱歉有问题。

0 个答案:

没有答案