これによりエラーが発生するのはなぜですか:Test::Test: no overloaded function takes 2 arguments
class Test
{
public:
Test(const std::vector<int>&)
{
}
};
Test test(boost::assign::list_of(4));
boost::assign::list_of の実装では、コンテナ タイプ (この場合は Test クラス) に、コンテナを初期化するための最初と最後のイテレータ (範囲) を受け取る 2 つの引数のコンストラクタが必要です。
具体的には、エラーは、boost::assign_detail::converter クラスの convert メソッドの return Container を含む以下の行から発生します。
template< class Container >
Container convert( const Container*, default_type_tag ) const
{
return Container( begin(), end() );
}
hmjd の回避策が成功する理由は、std::vector が 2 つのイテレータを取るコンストラクタを持つためです。