11

Visual Studio 2010/2011に可変個引数テンプレートがない場合(まだ!)、多くのパラメーターを受け取るコンストラクターは問題になる可能性があります。たとえば、以下はコンパイルされません。

    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の代わりにnewを使用する以外に、ここで他の可能性はありますか?

ありがとう。

4

2 に答える 2

25

ヒープに割り当てられた値に移動されるクラスの構築を使用できます。

MyMaterials.push_back(std::make_shared<Material>(
    Material(MyFacade, name, ambient, diffuse, specular, 
             emissive, opacity, shininess, shininessStrength, 
             reflectivity, bumpScaling, maps, mapFlags)));
于 2012-04-04T13:50:55.440 に答える
1

関連するすべてのメンバーを含む「入力構造体」を作成できます。
正しい値を入力し、それを唯一のパラメーターとしてコンストラクターを呼び出します。

于 2012-04-04T13:56:10.177 に答える