Visual Studio 2010/2011でバリデーションテンプレート(まだ!)がない場合、多くのパラメータを必要とするコンストラクタには問題があります。例えば、以下はコンパイルされません。std :: make_sharedコンストラクタのパラメータ数
MyMaterials.push_back(std::make_shared<Material>(MyFacade,
name,
ambient,
diffuse,
specular,
emissive,
opacity,
shininess,
shininessStrength,
reflectivity,
bumpScaling,
maps,
mapFlags));
、それは13個のパラメータを持っていると私はmake_sharedがarg0にからARG9に限定されていると思うので。明らかな回避策は2つの部分からなる構造ですが、私はこれを避けることを望んでいました。 make_sharedの代わりに新しいの使用を除いて、他の可能性はありますか?
ありがとうございました。
ああ。もちろん。それは完璧な意味合いがあります。 – Robinson
良いことは、make_sharedもshared_ptrを作成するときに最適化された1割り当てルーチンを使用することです。 –
残念ですが、これはローカルスタック(Material()が構築されている場所)からヒープ(ここでmake_sharedは実際にそれを置く)。この場合、コピーはどのように回避できますか? – Mordachai