C ++ Boost变体错误

时间:2016-02-09 22:45:14

标签: c++ boost

我一直在使用boost变体并遇到了一个似乎有问题的场景,但我觉得我对如何正确使用boost变体缺乏了解。这是我整理的一个小测试程序

main.cpp

#include <boost/variant.hpp>
#include <iostream>
#include <stdint.h>

typedef boost::variant<uint16_t, uint32_t> MyInt;

int main()
{
    uint16_t regular = 11;
    MyInt custom = regular;

    std::cout << custom << '\n';
    return 0;
}

好的以上工作正常,但如果我尝试执行以下操作,则会出错:

int16_t invalid = 11;
MyInt custom = invalid; // This line causes the error.

我预计会收到一个错误,但错误并没有告诉我我的问题实际发生在我的主要问题中,但是在Boost的课程中,这对于工作时来说并不是最有帮助的。更大的项目。

我开始研究提升访问者将错误放在main中,但是我们还没有看到这些问题如何解决我的问题。我与访客走在正确的轨道上还是我错过了其他一些?

编辑:

这里真正的问题是我的变体中未指定的任何类型的无效赋值(即char,std :: string,double等),而不是将int16_t转换为uint16_t。

1 个答案:

答案 0 :(得分:0)

int16_t要求对uint16_tuint32_t进行隐式转换。因此,没有最佳的重载,并且分配/初始化无法编译。

强制你的类型:

my_int = static_cast<int32_t>(int16_t_value);