c++ - 使用类型转换将 C 库包装在 C++ 类中

标签 c++ c

我正在慢慢学习成为一名更好的 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/

相关文章:

javascript - : javascript vs C vs Python? 中 if block 中变量的范围是多少

C 到 OCaml - for 循环内的 If 条件 OCaml

c++ - 那是 C++ 编译器错误吗?

c++ - 为什么这个 C++ 函数会产生困惑的输出?

c++ - 在 C++ 中使用标准流的灵活记录器类

c++ - 隐式转换整数计算以在 C++ 中 float

C++字符数组分配错误

c - 在 MIB 中定义动态长度的标量序列

c - 为什么errno的值打印不出来?

c - 文件阅读作为一种资源