我正在寻找在 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);
我想要做的是有一个具有两个公共方法的类,无论它们的参数类型如何serialize
,deserialize
都可以调用它们,并且每个方法都会根据函数重载调用适当的私有函数。
我究竟做错了什么?
编辑:
问题是链接器错误是错误的。问题不在于函数模板,而在于 .cpp 文件中未正确声明为类成员的s()
and函数。d()
所以错误源于函数模板无法调用d()
,s()
因为它们没有被定义,只是被声明,生效。