在写序列化部分的时候遇到一点问题,我想对不同类型共用同一套序列化的逻辑。 对于类,我的做法是定义接口,类似:
class Interface
{
public:
cstring serialize();
};
然后调用接口来做序列化
template <typename T>
cstring do_serialize(const T &t) {
return t.serialize();
}
template <typename T, typename... Args>
cstring do_serialize(const T &t, const Args &... object) {
return t.serialize() + do_serialize(object...);
}
但是内置类型没法实现 serialize(),我该怎么处理才比较好。
1
wwqgtxx 2020-01-14 17:22:37 +08:00 1
模板可以对类型特化
|
2
23571113 OP @wwqgtxx 感谢,我 nc 了,想着去用 if 判断类型了,于是 int,const int,const int & ...都不是一个类型把我搞蒙了。
|
3
wutiantong 2020-01-14 17:25:51 +08:00 1
你不要用这个 class Interface,它很不 cpp
你要用这个: template<class T> struct serialize_op { cstring operator() (T const &) const; }; |
4
wevsty 2020-01-14 18:01:24 +08:00 1
如果是 C++17 以上,在模板里判断类型也很方便的。
``` template<typename T> auto do_serialize(T t) { if constexpr(std::is_integral<T>::value) {return std::to_string(t);} else {return t;} } ``` |