我正在慢慢学习成为一名更好的 C++ 程序员,目前我正在讨论为 C 库实现包装器的最佳方法。该库是一种压缩文件格式的包装器,可以存储各种类型的标签(char *、char、double、float、int32_t)。类型存储为 uint8_t* 并且有许多辅助方法可以将这些标签转换为正确的类型。例如:
char tag2char(const uint8_t *v);
char* tag2string(const uint8_t *v);
uint32_t tag2int(const uint8_t *v);
等等。
我在模板方面没有太多经验,但是否值得以类似于 boost program options 的方式将这些方法包装在模板函数中?做? IE。 wrapper[tag].as<uint32_t>();
或者我应该只实现每个标签转换方法,让用户自己调用适当的方法?还是有更好的方法来处理这个问题?
感谢您的帮助。
最佳答案
您可以为此使用模板,它不需要包装类。只需特化一个函数模板:
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);
关于c++ - 使用类型转换将 C 库包装在 C++ 类中,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/4010399/