在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之外,还有其他可能吗?
感谢。
答案 0 :(得分:22)
您可以使用构造一个类,然后将其移动到堆分配值中。
MyMaterials.push_back(std::make_shared<Material>(
Material(MyFacade, name, ambient, diffuse, specular,
emissive, opacity, shininess, shininessStrength,
reflectivity, bumpScaling, maps, mapFlags)));
答案 1 :(得分:1)
您可以创建一个包含所有相关成员的“输入结构” 用正确的值填充它,并用它作为他唯一的参数调用构造函数。