簡體   English   中英

boost :: variant是否支持64位整數?

[英]Does boost::variant support 64bit integers?

我嘗試將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確實支持浮點數和整數,並且您嘗試分配整數)。 在這種情況下,顯式類型轉換可以解決該問題。

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM