当我们使用 cout 时,boost::any 和 boost::variant 之间的区别<<

Difference between boost::any and boost::variant when we use cout<<

本文关键字:boost lt 之间 variant 区别 any cout 我们      更新时间:2023-10-16

我已经使用boost::variant<string, float>成功地运行了以下代码。然而,当我尝试使用boost::any时,我在cout<<指令处遇到操作数不匹配错误,代码为:

for( vector<vector<vector<boost::any>>>::const_iterator i = masterList.begin(); i != masterList.end(); ++i)
{
    for( vector<vector<boost::any>>::const_iterator j = i->begin(); j != i->end(); ++j)
    {
        for( vector<boost::any>::const_iterator k = j->begin(); k != j->end(); ++k)
        { 
            cout<<*k<<' ';
        }
    }
}

Boost.Any提供全类型擦除,底层类型的所有特性(如流式传输到std::ostream)都会被擦除。返回类型的唯一方法是使用any_cast函数。

如果您想要部分类型擦除,请查看Steven Watanabe的Boost.TypeErasure库。请注意,TypeErasure是自Boost 1.54以来的官方Boost库。