我一直在使用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。
答案 0 :(得分:0)
int16_t
要求对uint16_t
和uint32_t
进行隐式转换。因此,没有最佳的重载,并且分配/初始化无法编译。
强制你的类型:
my_int = static_cast<int32_t>(int16_t_value);