boost ::任何底层类型的比较器

时间:2017-05-22 14:40:36

标签: c++ boost-any

我有一个用于对字节流进行标记的结构(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更适合我的任务。

0 个答案:

没有答案