0

を使用して、次のコードを正常に実行しました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<<' ';
        }
    }
}
4

1 に答える 1

2

Boost.Anyは完全なタイプの消去を提供し、基になるタイプのすべての特性 ( a へのストリーミングなどstd::ostream) が消去されます。型を戻す唯一の方法は、any_cast関数を使用することです。

部分的な型消去が必要な場合は、Steven Watanabe のBoost.TypeErasureライブラリを参照してください。TypeErasure は、Boost 1.54 以降の公式の Boost ライブラリであることに注意してください。

于 2013-06-23T10:46:59.487 に答える