带有函数模板和重载的C ++类

时间:2012-11-12 19:09:22

标签: c++ class templates overloading

我希望用C ++创建一个序列化类来满足我正在进行的项目的需求。请考虑以下事项:

class serializer {
    private:
        void s(int in, std::string &out);
        void d(std::string in, int &out);

    public:    
        template<typename T> void serialize(T in, std::string &out){
            s(in, out);
        };

        template<typename T> void deserialize(std::string in, T &out){
            d(in, out);
        };
};

我是模仿的新手,所以我必须在那里做一些非常错误的事情,因为它不会抱怨抱怨'未定义的引用':

undefined reference to `void serializer::serialize<int>
(int, std::basic_string<char, std::char_traits<char>, std::allocator<char> >&)'

当这样称呼时:

serializer s;
int t = 0;
std::string str;
s.serialize(t, str);

我要做的是拥有一个包含两个公共方法serializedeserialize的类,无论参数的类型如何,都可以调用它们,并且每个方法都会调用相应的私有函数。函数重载。

我做错了什么?

修改

问题是链接器错误是错误的。问题不在于函数模板,而是使用s()d()函数,这些函数未在.cpp文件中作为类的成员正确声明。因此,错误源于函数模板无法调用d()s(),因为它们未被定义,只是声明了,有效。

1 个答案:

答案 0 :(得分:1)

问题可能是您在.cpp文件中指定了sd而没有explicit template instantiation类型。尝试在头文件中实现这些方法。