我有一个用于标记字节流(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.
};
它似乎工作到我尝试检查单元测试中的值的地步。
IE:
// 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
更适合我的任务。