【发布时间】:2013-05-22 09:10:14
【问题描述】:
我包装了一个 C 接口,它有一个返回 Value* 对象的加载函数,该对象指向一个动态数组 Value 对象:
typedef struct Value {
union {
int8_t i8;
int16_t i16;
int32_t i32;
int64_t i64;
bool b;
} value;
} Value_T;
给定数组中的对象总是相同的类型。
我的想法是用 C++ 表示如下:
typedef boost::variant<std::vector<bool>, std::vector<int8_t>, std::vector<int16_t>, std::vector<int32_t>, std::vector<int64_t>, std::vector<std::string> > Container;
这是合理的吗?我应该注意哪些陷阱?关于如何定义 bool 是否存在编译器特定的问题?我意识到 std::vector 在内部使用位表示,并且在这方面还有其他问题。
我正在使用 C++98 编译器。
【问题讨论】:
-
由于您要求“陷阱”,请注意 std::vector
首先被破坏。见open-std.org/jtc1/sc22/wg21/docs/papers/2007/n2160.html。有关替代方案的讨论,请参阅stackoverflow.com/questions/670308/alternative-to-vectorbool。