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是的,这是第二个标题前的最后一段所建议的。如果这符合你的需要,就拿去吧。