代码之家  ›  专栏  ›  技术社区  ›  GWW

在C++类中用类型转换包装C库

c c++
  •  4
  • GWW  · 技术社区  · 14 年前

    char tag2char(const uint8_t *v);
    char* tag2string(const uint8_t *v);
    uint32_t tag2int(const uint8_t *v); 
    

    等等。

    我对模板没有太多的经验,但是是否值得将这些方法包装成一个类似于 boost program options 做?即。 wrapper[tag].as<uint32_t>();

    谢谢你的帮助。

    3 回复  |  直到 14 年前
        1
  •  4
  •   Marcelo Cantos    14 年前

    您可以使用模板来实现这一点,它不需要包装类。只需指定一个函数模板:

    template <typename T>
    T tag_to(const uint8_t *v);
    
    template <>
    char tag_to<char>(const uint8_t *v) { ... }
    
    template <>
    char* tag_to<char*>(const uint8_t *v) { ... }
    
    template <>
    uint32_t tag_to<uint32_t>(const uint8_t *v) { ... }
    
    ...
    
    uint32_t i = tag_to<uint32_t>(tag);
    
        2
  •  4
  •   Jack Kelly    14 年前

    模板方法听起来很合理,因为您必须输入类型的名称 在某处

    我不支持通过引用传递,因为它使函数不如子表达式有用。

        3
  •  1
  •   Dialecticus    14 年前