gpt4 book ai didi

c++ - boost::variant 是否支持 64 位整数?

转载 作者:行者123 更新时间:2023-11-28 06:01:04 24 4
gpt4 key购买 nike

我尝试将 boost::variant 与 64 位整数结合使用。不幸的是它没有用。有没有什么办法解决这一问题?还是我的升级版本太旧了?我正在使用 V1.45。

这个声明有效:

std::vector< boost::variant<int, float64_t> > vec2;

这个声明不起作用:

std::vector< boost::variant<long long int, float64_t> > vec2;

编辑

这是一个编译器错误:

error C2668: 'boost::detail::variant::make_initializer_node::apply<BaseIndexPair,Iterator>::initializer_node::initialize' : ambiguous call to overloaded function
1> with
1> [
1> BaseIndexPair=boost::mpl::pair<boost::detail::variant::make_initializer_node::apply<boost::mpl::pair<boost::detail::variant::make_initializer_node::apply<boost::mpl::pair<boost::detail::variant::initializer_root,boost::mpl::int_<0>>,boost::mpl::l_iter<boost::mpl::list3<__int64,double,std::basic_string<char,std::char_traits<char>,std::allocator<char>>>>>::initializer_node,boost::mpl::int_<1>>,boost::mpl::l_iter<boost::mpl::list2<double,std::basic_string<char,std::char_traits<char>,std::allocator<char>>>>>::initializer_node,boost::mpl::int_<2>>,
1> Iterator=boost::mpl::l_iter<boost::mpl::list1<std::basic_string<char,std::char_traits<char>,std::allocator<char>>>>
1> ]
1> boost-1_45_0\boost\variant\detail\initializer.hpp(89): could be 'int boost::detail::variant::make_initializer_node::apply<BaseIndexPair,Iterator>::initializer_node::initialize(void *,const __int64 &)'
1> with
1> [
1> BaseIndexPair=boost::mpl::pair<boost::detail::variant::initializer_root,boost::mpl::int_<0>>,
1> Iterator=boost::mpl::l_iter<boost::mpl::list3<__int64,double,std::basic_string<char,std::char_traits<char>,std::allocator<char>>>>
1> ]
1> boost-1_45_0\boost\variant\detail\initializer.hpp(89): or 'int boost::detail::variant::make_initializer_node::apply<BaseIndexPair,Iterator>::initializer_node::initialize(void *,const double &)'
1> with
1> [
1> BaseIndexPair=boost::mpl::pair<boost::detail::variant::make_initializer_node::apply<boost::mpl::pair<boost::detail::variant::initializer_root,boost::mpl::int_<0>>,boost::mpl::l_iter<boost::mpl::list3<__int64,double,std::basic_string<char,std::char_traits<char>,std::allocator<char>>>>>::initializer_node,boost::mpl::int_<1>>,
1> Iterator=boost::mpl::l_iter<boost::mpl::list2<double,std::basic_string<char,std::char_traits<char>,std::allocator<char>>>>
1> ]
1> while trying to match the argument list '(void *, const int)'
1> boost-1_45_0\boost\variant\variant.hpp(1373) : see reference to function template instantiation 'void boost::variant<T0_,T1,T2>::convert_construct<const T>(T &,int,boost::mpl::false_)' being compiled
1> with
1> [
1> T0_=__int64,
1> T1=float64_t,
1> T2=std::string,
1> T=int
1> ]
1> (1900) : see reference to function template instantiation 'boost::variant<T0_,T1,T2>::variant<int>(const T &)' being compiled
1> with
1> [
1> T0_=__int64,
1> T1=float64_t,
1> T2=std::string,
1> T=int
1> ]

编辑

错误在未发布的代码中。 @hvd 还是找到了错误。我必须明确命名类型 - 但前提是它是 int64。

没有错误:

std::vector <boost::variant <int, float64_t> > vec;
vec.push_back ( 22 );

编译器错误:

std::vector <boost::variant <__int64, float64_t> > vec;
vec.push_back ( 22 );

没有错误:

std::vector <boost::variant <__int64, float64_t> > vec;
vec.push_back ( (__int64) 22 );

最佳答案

简短回答:boost::variant 确实支持 64 位整数。

但是如果分配给 boost::variant 的值不明确,这可能会导致编译器错误(例如,boost::variant 确实支持 float 和整数,而您尝试分配一个整数)。在这种情况下,显式类型转换可以解决问题。

关于c++ - boost::variant 是否支持 64 位整数?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/33284508/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com