我有一个用于对字节流进行标记的结构(std::vector<uint8_t>
)。流可以包含字节,单词,双字,以空字符结尾的字符串和原始数据。
struct Token {
enum TokenClass {
BYTE, WORD, INT, SZCHAR, DATA
};
TokenClass type;
boost::any value;
Token( TokenClass c, uint8_t b ) : type(c), value(b) { }
Token( TokenClass c, uint16_t w ) : type(c), value(w) { }
... etc.
};
似乎可以解决我尝试检查单元测试中的值的问题。
即:
// ts is of type std::vector<Token>
CHECK_EQUAL(Token::WORD, ts[0].type); // fine
CHECK_EQUAL(257, ts[0].value); // error!
给出错误
错误:'operator =='不匹配(操作数类型为'const boost :: any' 和'const int') if(!(expected == actual))
所以我在类中添加了一个比较器,仅用于int:
bool operator==(const int rhs) const
{
return boost::any_cast<int>(value) == rhs;
}
但这并没有缓解这个问题。
如何将基础类型与值进行比较,因为一旦我启动验证代码,我就需要能够比较值。
boost::variant
还能更适合我需要做的事情吗?在我快速阅读两篇内容时,似乎any
更适合我的任务。