如何在C 中的单个构造函数中调用多个构造函数
How to call multiple constructors inside a single constructor in C++
我在C 中有一个正在处理多个功能的运行程序,我正在尝试将程序转换为可以使用构造函数的实现。程序看起来如下
bool netlist::create(const evl_wires &wires,
const evl_components &comps)
{
return create_nets(wires)&& create_gates(comps);
}
netlist::netlist(const evl_wires &wires,
const evl_components &comps)
{
create(wires, comps);
}
在主要功能中,我成功地称呼构造函数
netlist nl(wires, comps);
更改我试图通过添加更多的构造函数来实现这样的实现
netlist::netlist(const evl_components &comps)
{
create_gates(comps);
}
netlist::netlist(const evl_wires &wires)
{
create_nets(wires);
}
netlist::netlist(const evl_wires &wires,
const evl_components &comps)
{
//this->netlist::netlist(wires);//this approach doesn't work
//this->netlist::netlist(comps);
*this = netlist::netlist(wires);//it doesn't work too
*this = netlist::netlist(comps);
}
在互联网网站上给出的示例,包括一个,只是显示如何在另一个内部调用一个构造函数,我们如何在一个示例中调用多个构造函数?另一个问题是,当使用我的程序代码的情况下,使用构造函数实现比实施量更好时?
您要寻找的是委派构造函数(在C 11中引入(,您可以在另一个构造函数的成员初始化列表中调用构造函数,例如:
netlist::netlist(const evl_components &comps)
{
create_gates(comps);
}
netlist::netlist(const evl_wires &wires)
{
create_nets(wires);
}
netlist::netlist(const evl_wires &wires, const evl_components &comps)
: netlist(wires) // <-- delegating here!
{
create_gates(comps);
}
请注意,您只能一次委派一个构造函数,因此在上面的示例中,2-Param构造函数不可能将两个构建器委派给两个 1-param构造函数。但是,您可以在代表团上交换,因此1-Param构造函数都将其委托给2-Param构造函数:
netlist::netlist(const evl_components &comps)
: netlist(evl_wires(), comps)
{
}
netlist::netlist(const evl_wires &wires)
: netlist(wires, evl_components())
{
}
netlist::netlist(const evl_wires &wires, const evl_components &comps)
{
create_nets(wires);
create_gates(comps);
}
但是,在您的特定示例中,将任何构造函数委派的好处几乎没有。由于您已经具有初始化两个组件的通用功能,只需直接调用它们:
netlist::netlist(const evl_components &comps)
{
create_gates(comps);
}
netlist::netlist(const evl_wires &wires)
{
create_nets(wires);
}
netlist::netlist(const evl_wires &wires, const evl_components &comps)
{
create_nets(wires);
create_gates(comps);
}
如果您是pre-c 11,则需要移动通用代码以分开函数并将其与构造函数拨打。
如果您可以访问C 11,请使用委派构造函数。
相关文章:
- 获取从C++中同一类中的构造函数调用的方法返回的值
- 从具有按值捕获的 lambda 移动构造 std::函数时,移动构造函数调用两次
- 确保所有构造函数调用相同的函数 c++ 设计模式
- 减少复制构造函数调用
- 使用回调函数从构造函数调用虚拟/派生方法的替代方法?
- 在 Google 测试中,我可以从构造函数调用 GetParam() 吗?
- C++ - 从另一个类构造函数调用类构造函数
- 在C++中初始化带有和不使用构造函数调用的对象有什么区别
- 是否可以从移动构造函数调用默认构造函数?
- 在模板生成器模式中分解重复的构造函数调用
- std::atexit 从全局对象的构造函数调用时的排序
- 对构造函数调用的约束
- 编译器错过了无效的构造函数调用,并调用不存在的(或私有的)默认构造函数
- 用构造函数调用填充向量
- 创建指针时是否没有构造函数调用
- 使用 emplace_back 避免移动构造函数调用的最佳方法?
- C++ 抽象类构造函数调用
- 为什么函数参数将带有参数的构造函数调用
- 为什么比“构造函数”调用更多的“解构器”调用
- 将对象传递给函数并不是导致构造函数调用