c++ 内置类型和类如何一起处理

2020-01-14 17:20:12 +08:00
 23571113

在写序列化部分的时候遇到一点问题,我想对不同类型共用同一套序列化的逻辑。 对于类,我的做法是定义接口,类似:

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(),我该怎么处理才比较好。

1931 次点击
所在节点    C++
4 条回复
wwqgtxx
2020-01-14 17:22:37 +08:00
模板可以对类型特化
23571113
2020-01-14 17:24:41 +08:00
@wwqgtxx 感谢,我 nc 了,想着去用 if 判断类型了,于是 int,const int,const int & ...都不是一个类型把我搞蒙了。
wutiantong
2020-01-14 17:25:51 +08:00
你不要用这个 class Interface,它很不 cpp
你要用这个:
template<class T>
struct serialize_op
{
cstring operator() (T const &) const;
};
wevsty
2020-01-14 18:01:24 +08:00
如果是 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;}
}
```

这是一个专为移动设备优化的页面(即为了让你能够在 Google 搜索结果里秒开这个页面),如果你希望参与 V2EX 社区的讨论,你可以继续到 V2EX 上打开本讨论主题的完整版本。

https://www.v2ex.com/t/637878

V2EX 是创意工作者们的社区,是一个分享自己正在做的有趣事物、交流想法,可以遇见新朋友甚至新机会的地方。

V2EX is a community of developers, designers and creative people.

© 2021 V2EX