C ++:重载<<运营商与模板

时间:2013-11-13 15:13:04

标签: c++ templates overloading operator-keyword

我无法找到关于以下问题的帖子。 我想写一个litte类,它重载了<< -Operator来获取 使用模板的可变数据类型。我班的.h文件看起来像这样:

class MyClass {

    private:
       ...

    public:
        template <typename> void operator<<(T data);
};

CPP文件:

template <typename T> void MyClass::operator<<(T data) {
    ...
    return;
}

现在我想用我的班级:

MyClass mc;
mc << "Test";
mc << 123; 

但是我的gcc编译器不会编译它给我以下错误信息:

undefined reference to `void MyClass::operator<< <char const*>(char const*)'

或者如果我使用int例如:

undefined reference to `void MyClass::operator<< <int>(int)'

我做错了什么???有人能帮助我吗?

1 个答案:

答案 0 :(得分:1)

您必须将实现从.cpp移动到.h文件。您可以直接定义它:

class MyClass {

    private:
       ...

    public:
        template <class T> 
        void operator << (const T& data)
        {
            //do stuff based on T

            cout << data << " with size:" << sizeof(T);
        }
};