2

我包装了一个 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 编译器。

4

2 回答 2

2

由于您已经在使用 Boost,因此最好只使用boost::containers::vector<bool>. 该容器将具有您真正想要的行为。

于 2013-05-22T09:14:35.707 回答
1

boost::variant与类型无关,无论std::vector<bool>实现细节如何,都应该工作。

于 2013-05-22T09:15:08.100 回答