我正在包装一个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编译器。
答案 0 :(得分:2)
由于您已经在使用Boost,因此最好只使用boost::containers::vector<bool>
。该容器将具有您真正想要的行为。
答案 1 :(得分:1)
boost::variant
与类型无关,无论std::vector<bool>
实现的详细信息如何,都应该有效。