V2EX = way to explore
V2EX 是一个关于分享和探索的地方
现在注册
已注册用户请  登录
23571113
V2EX  ›  C++

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

  •  
  •   23571113 · 2020-01-14 17:20:12 +08:00 · 1953 次点击
    这是一个创建于 1805 天前的主题,其中的信息可能已经有所发展或是发生改变。

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

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

    4 条回复    2020-01-14 18:01:24 +08:00
    wwqgtxx
        1
    wwqgtxx  
       2020-01-14 17:22:37 +08:00   ❤️ 1
    模板可以对类型特化
    23571113
        2
    23571113  
    OP
       2020-01-14 17:24:41 +08:00
    @wwqgtxx 感谢,我 nc 了,想着去用 if 判断类型了,于是 int,const int,const int & ...都不是一个类型把我搞蒙了。
    wutiantong
        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;
    };
    wevsty
        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;}
    }
    ```
    关于   ·   帮助文档   ·   博客   ·   API   ·   FAQ   ·   实用小工具   ·   4048 人在线   最高记录 6679   ·     Select Language
    创意工作者们的社区
    World is powered by solitude
    VERSION: 3.9.8.5 · 27ms · UTC 10:17 · PVG 18:17 · LAX 02:17 · JFK 05:17
    Developed with CodeLauncher
    ♥ Do have faith in what you're doing.