4

std:make_shared と std::shared_ptrの以前のスタックの質問を見て、これを uni プロジェクトに実装しようとしました。これは以前の「質問」でした:

どんなシチュエーションも思い浮かばない

std::shared_ptr<Object> obj(new Object("foo", 1));

することが好ましいだろう

auto obj = std::make_shared<Object>("foo", 1);

したがって、私はこのコードを取りました:

std::shared_ptr<Triangle> pT1(new Triangle(pCanvas, 30, 30, 30, 60, 60, 30, 255, 0, 0));

そして、このコードに変更しました:

auto pT1 = std::make_shared<Triangle>(pCanvas, 30, 30, 30, 60, 60, 30, 255, 0, 0);

ただし、std::make_shared には赤の下線が引かれています。マウスオーバーすると、「エラー: オーバーロードされた関数 "std::make_shared" のインスタンスが引数リストと一致しません」というエラーが表示されます。

私のコードはコードの 1 行目で正しくコンパイルおよび実行されますが、2 行目を使用するとエラーが発生します。

これらのエラーは次のとおりです。

`1>------ ビルド開始: プロジェクト: SIT153Canvas、構成: Win32 のデバッグ ------ 1> main.cpp

1>c:\users\steve\documents\visual studio 2012\projects\sit153canvas\main.cpp(54): エラー C2780: 'std::shared_ptr<_Ty> std::make_shared(_V0_t &&,_V1_t &&,_V2_t && ,_V3_t &&,_V4_t &&)' : 5 つの引数が必要です - 10 個が提供されます

1> c:\program files (x86)\microsoft visual studio 11.0\vc\include\memory(972) : 'std::make_shared' の宣言を参照してください

1>c:\users\steve\documents\visual studio 2012\projects\sit153canvas\main.cpp(54): エラー C2780: 'std::shared_ptr<_Ty> std::make_shared(_V0_t &&,_V1_t &&,_V2_t && ,_V3_t &&)' : 4 つの引数が必要です - 10 個が提供されます

1> c:\program files (x86)\microsoft visual studio 11.0\vc\include\memory(972) : 'std::make_shared' の宣言を参照してください

1>c:\users\steve\documents\visual studio 2012\projects\sit153canvas\main.cpp(54): エラー C2780: 'std::shared_ptr<_Ty> std::make_shared(_V0_t &&,_V1_t &&,_V2_t && )' : 3 つの引数が必要です - 10 個が提供されます

1> c:\program files (x86)\microsoft visual studio 11.0\vc\include\memory(972) : 'std::make_shared' の宣言を参照してください

1>c:\users\steve\documents\visual studio 2012\projects\sit153canvas\main.cpp(54): エラー C2780: 'std::shared_ptr<_Ty> std::make_shared(_V0_t &&,_V1_t &&)' : 2 つの引数が必要です - 10 個が提供されます

1> c:\program files (x86)\microsoft visual studio 11.0\vc\include\memory(972) : 'std::make_shared' の宣言を参照してください

1>c:\users\steve\documents\visual studio 2012\projects\sit153canvas\main.cpp(54): エラー C2780: 'std::shared_ptr<_Ty> std::make_shared(_V0_t &&)' : 1 つの引数が必要です- 10個提供

1> c:\program files (x86)\microsoft visual studio 11.0\vc\include\memory(972) : 'std::make_shared' の宣言を参照してください

1>c:\users\steve\documents\visual studio 2012\projects\sit153canvas\main.cpp(54): エラー C2780: 'std::shared_ptr<_Ty> std::make_shared(void)': 0 引数が必要です - 10個提供

1> c:\program files (x86)\microsoft visual studio 11.0\vc\include\memory(972) : 'std::make_shared' の宣言を参照してください

エラーによると、std::make_shared は最大 5 つの引数しか期待していないようです。残念ながら、私が検索した他の Web サイトでは、この問題を明らかにしていません。どんな助けでも大歓迎です。

4

1 に答える 1

6

VS2012 は可変個引数テンプレートを完全にはサポートしていません。コンパイラのサポートはありません。代わりに、デフォルトで最大 5 つのパラメータがライブラリでシミュレートされます。実際の数は、マクロによって決定され_VARIADIC_MAXます。プロジェクトのプロパティで十分に大きな値に定義してください。

于 2013-10-11T04:08:32.087 に答える