2013-05-22 39 views
2

我包裝,其具有負載函數返回一個Value*對象,它指向Value對象的動態陣列的C接口:添加的std ::矢量<bool>到容器的Variant

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編譯器。

+3

既然你問「陷阱」,請注意std :: vector 首先被打破。見http://www.open-std.org/jtc1/sc22/wg21/docs/papers/2007/n2160.html。有關替代方法的討論,請參閱http://stackoverflow.com/questions/670308/alternative-to-vectorbool。 –

回答

2

由於您已經在使用Boost,因此最好只使用boost::containers::vector<bool>。該容器將具有您實際需要的行爲。

1

boost::variant是類型不可知的,應該工作,不管std::vector<bool>實施的細節。

相關問題