我希望用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
的类,无论参数的类型如何,都可以调用它们,并且每个方法都会调用相应的私有函数。函数重载。
我做错了什么?
修改
问题是链接器错误是错误的。问题不在于函数模板,而是使用s()
和d()
函数,这些函数未在.cpp文件中作为类的成员正确声明。因此,错误源于函数模板无法调用d()
和s()
,因为它们未被定义,只是声明了,有效。