Warning: file_get_contents(/data/phpspider/zhask/data//catemap/6/cplusplus/136.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
C++ 一个构造函数可以处理多种类型的不同对象参数吗?_C++ - Fatal编程技术网

C++ 一个构造函数可以处理多种类型的不同对象参数吗?

C++ 一个构造函数可以处理多种类型的不同对象参数吗?,c++,C++,一个构造函数可以处理多个对象吗 例如: 来自类Add的构造函数有一个构造函数Add(Mult m1,Div d1),但也有另一个构造函数接受参数Add(Div d2,Mult m2),我有没有办法创建一个构造函数,可以决定用户输入哪些参数并根据这些参数运行 如果没有,我有多个对象,这会导致我创建20多个构造函数 两个构造函数的任务基本相同,即添加对象类型。在C++中.< /p>类型级别 如果您可以使用C++11,那么可以使用转发引用并分派它们,类似于: class A { public: t

一个构造函数可以处理多个对象吗

例如:

来自
类Add
的构造函数有一个
构造函数Add(Mult m1,Div d1)
,但也有另一个构造函数接受参数
Add(Div d2,Mult m2)
,我有没有办法创建一个构造函数,可以决定用户输入哪些参数并根据这些参数运行

如果没有,我有多个对象,这会导致我创建20多个构造函数

两个构造函数的任务基本相同,即添加对象类型。在C++中.< /p>类型级别 如果您可以使用C++11,那么可以使用转发引用并分派它们,类似于:

class A {
public:
  template<class _First, class _Second>
  A(_First&& firstArgument, _Second&& secondArgument);
};
A类{
公众:
模板
A(_First&&firstArgument,_Second&&secondArgument);
};
然后,在构造函数中,您可以使用
头的功能来区分调用适当方法的类型

然而,在C++11之前,您仍然可以做类似的事情(可能是对常量l值引用进行硬编码),但您可能需要自己编写许多代码

多态性
另一个非常常见的解决方案是创建一个超类,例如,
SimpleExpression
,您的类从中继承,然后只接受基类类型。

最好有两个构造函数并翻转参数。
template
似乎是解决方案,可能是构造函数,也可能是类本身。或者使用。这是另一个选项,但是当OP尝试使用单个构造函数管理此任务时,这仍然会导致许多构造函数。“区分类型并调用适当的方法”如果constexpr,它的
可能需要C++17。转发引用似乎不需要,因为const ref似乎足够了,然后
std::is_same
可以在C++11之前实现。@Jarod42是的,这是第二个标题前的最后一段所建议的。如果这符合你的需要,就拿去吧。