一个构造函数可以照顾多种类型的不同对象参数吗?

时间:2019-01-23 05:08:14

标签: c++

一个构造函数可以照顾多个对象吗?

例如:

class Add中的构造函数有一个constructor Add(Mult m1, Div d1),但又有另一个构造函数带有参数Add(Div d2, Mult m2),有什么方法可以创建一个构造函数,从而可以确定用户输入了哪些参数并据此运行?

如果我没有多个对象,这会使我构造20个以上的构造函数?

对于两个构造函数,添加对象类型的工作基本上是相同的。在C ++中。

1 个答案:

答案 0 :(得分:1)

类型级别

好吧,如果您可以使用C ++ 11,则use可以为此使用转发引用并将其分发,类似于:

class A {
public:
  template<class _First, class _Second>
  A(_First&& firstArgument, _Second&& secondArgument);
};

然后,在构造函数内部,您可以使用<type_traits>标头的功能来区分调用适当方法的类型。

但是,在C ++ 11之前,您仍然可以做类似的事情(可能为const左值引用进行硬编码),但是您可能必须自己编写许多事情。

多态

对此问题的另一个非常常见的解决方案是创建一个超类,例如SimpleExpression,您的类从那里继承,然后只采用基类类型。