std :: make_shared构造函数中的参数个数

Rob*_*son 10 c++ stl make-shared

在Visual Studio 2010/2011中缺少可变参数模板(仍然!)时,采用大量参数的构造函数可能会出现问题.例如,以下内容将无法编译:

    MyMaterials.push_back(std::make_shared<Material>(MyFacade,
                                                     name,
                                                     ambient,
                                                     diffuse,
                                                     specular,
                                                     emissive,
                                                     opacity,
                                                     shininess,
                                                     shininessStrength,
                                                     reflectivity,
                                                     bumpScaling,
                                                     maps,
                                                     mapFlags));
Run Code Online (Sandbox Code Playgroud)

,因为它有13个参数,我认为make_shared是从arg0限制到arg9.显而易见的解决方案是两部分构建,但我希望避免这种情况.除了使用new而不是make_shared 之外,还有其他可能吗?

谢谢.

111*_*111 22

您可以使用构造一个类,然后将其移动到堆分配值中.

MyMaterials.push_back(std::make_shared<Material>(
    Material(MyFacade, name, ambient, diffuse, specular, 
             emissive, opacity, shininess, shininessStrength, 
             reflectivity, bumpScaling, maps, mapFlags)));
Run Code Online (Sandbox Code Playgroud)