0

我正在寻找在 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都可以调用它们,并且每个方法都会根据函数重载调用适当的私有函数。

我究竟做错了什么?

编辑:

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

4

1 回答 1

1

问题很可能是您在 .cpp 文件中指定s并没有对类型进行显式模板实例化。尝试仅在头文件中实现这些方法。d

于 2012-11-12T19:50:23.687 回答