In assenza di modelli variadici (ancora!) In Visual Studio 2010/2011, un costruttore che accetta molti parametri può essere problematico. Ad esempio, il seguente non verrà compilato:std :: make_shared numero di parametri nel costruttore
MyMaterials.push_back(std::make_shared<Material>(MyFacade,
name,
ambient,
diffuse,
specular,
emissive,
opacity,
shininess,
shininessStrength,
reflectivity,
bumpScaling,
maps,
mapFlags));
, perché ha 13 parametri e penso make_shared è limitata da arg0 a arg9. Il lavoro ovvio è una costruzione in due parti, ma speravo di evitarlo. C'è qualche altra possibilità qui, a parte l'uso di new invece di make_shared?
Grazie.
Ah. Ovviamente. Questo ha perfettamente senso. – Robinson
La cosa buona è che make_shared utilizzerà anche una routine di allocazione ottimizzata durante la creazione di shared_ptr –
Mi dispiace - Non vedo come questo eviti di copiare dallo stack locale (dove Material() viene costruito) all'heap (dove make_shared sarà effettivamente mettilo a posto). In questo caso, come si può evitare la copia? – Mordachai