Wenn in Visual Studio 2010/2011 keine Variadic-Vorlagen (noch!) Vorhanden sind, kann ein Konstruktor, der viele Parameter benötigt, problematisch sein. Zum Beispiel kompilieren folgendes nicht:std :: make_shared Anzahl der Parameter im Konstruktor
MyMaterials.push_back(std::make_shared<Material>(MyFacade,
name,
ambient,
diffuse,
specular,
emissive,
opacity,
shininess,
shininessStrength,
reflectivity,
bumpScaling,
maps,
mapFlags));
, weil es 13 Parameter hat, und ich denke make_shared von arg0 beschränkt auf Arg9. Die offensichtliche Umgehung ist eine zweiteilige Konstruktion, aber ich hatte gehofft, das zu vermeiden. Gibt es hier eine andere Möglichkeit, abgesehen von der Verwendung von neue anstelle von make_shared?
Danke.
Ah. Na sicher. Das macht vollkommen Sinn. – Robinson
Die gute Sache ist, dass make_shared auch eine optimierte Allokationsroutine beim Erstellen von shared_ptr verwendet. –
Entschuldigung - ich sehe nicht, wie dies das Kopieren vom lokalen Stack (wo Material() konstruiert wird) zum Heap (wo make_shared wird) Setzen Sie es ab). Wie kann in diesem Fall die Kopie möglicherweise vermieden werden? – Mordachai