13

これはコンパイルされます:

std::vector<int> value = boost::assign::list_of(1)(2);

しかし、これではありません:

Constructor(std::vector<int> value)
{
}

Constructor (boost::assign::list_of(1)(2));

コンストラクターに渡されたベクトルを初期化するためのワンライナー ソリューションはありますか?

さらに良いことに、代わりに参照を取得してコンストラクターがクラス変数にコピーする場合は、次のようになります。

Constructor(std::vector<int>& value)
{
    _value = value;
}

アップデート

次のことを試してみると:

enum Foo
{
    FOO_ONE, FOO_TWO 
};

class Constructor
{
public:
    Constructor(const std::vector<Foo>& value){}
};

Constructor c(std::vector<Foo>(boost::assign::list_of(FOO_ONE)));

コンパイラ エラーが発生します。

error C2440: '<function-style-cast>' : cannot convert from 'boost::assign_detail::generic_list<T>' to 'std::vector<_Ty>'
1>          with
1>          [
1>              T=Foo
1>          ]
1>          and
1>          [
1>              _Ty=Foo
1>          ]
1>          No constructor could take the source type, or constructor overload resolution was ambiguous
4

2 に答える 2

20

これは厄介な問題です。以前にも問題がありました。convert_to_container次の方法を使用して修正しました。

Constructor c(boost::assign::list_of(1)(2).convert_to_container<std::vector<int> >() );

コンストラクターで使用するstd::listには、さらに問題があります。適切な回答については、boost の list_of を使用してコンストラクターに std::list を渡すを参照してください。

于 2013-07-23T09:08:32.250 に答える