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

std::make_shared number of parameters in the constructor

本文关键字:参数 数数 shared make std 构造函数      更新时间:2023-10-16

在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。显而易见的是,这是一个由两部分组成的结构,但我希望避免这种情况。除了使用new而不是make_shared之外,这里还有其他可能性吗?

谢谢。

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

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

您可以创建一个包含所有相关成员的"输入结构"
用正确的值填充它,并用它作为唯一的参数调用构造函数。