C++ &引用;凌驾;构造函数并调用祖辈构造函数
我正在使用库中的一个类,我们称之为C++ &引用;凌驾;构造函数并调用祖辈构造函数,c++,templates,inheritance,constructor,C++,Templates,Inheritance,Constructor,我正在使用库中的一个类,我们称之为LibraryClass,其中LibraryClass继承自其模板,如下所示: template<class BaseClass> class LibraryClass : public BaseClass { ... 模板 班级图书馆班级 : 公共基类 { ... 这个类正是我想要的,但是构造函数中有一个bug。我正在尝试创建一个派生类,如下所示: template<class BaseClass> class MyClas
LibraryClass
,其中LibraryClass
继承自其模板,如下所示:
template<class BaseClass>
class LibraryClass
:
public BaseClass
{
...
模板
班级图书馆班级
:
公共基类
{
...
这个类正是我想要的,但是构造函数中有一个bug。我正在尝试创建一个派生类,如下所示:
template<class BaseClass>
class MyClass
:
public LibraryClass<BaseClass>
{
...
模板
类MyClass
:
公共图书馆课
{
...
然后添加一个新的构造函数。但是,在构造函数MyClass()中,我需要调用构造函数BaseClass(),它不是直接的父级。如上所述,我不想调用LibraryClass(),因为它有一个bug
我应该如何用一个新的构造函数来创建这个新类?我怀疑在一般情况下是否有符合标准的方法来绕过父构造函数(如果存在这样的东西,如何确保父-子对象处于可用状态?) IMO修复此错误的最佳方法是更改
LibraryClass
如果你做不到这一点,你可以复制LibraryClass
并修复副本中的错误。这有明显的、潜在的非常严重的缺点
另一种可能的替代方法是调用错误的构造函数,然后在
MyClass::MyClass
中修复对象以解决错误。这种方法可能适用于您的情况,也可能不适用于您的情况。假设您可以绕过父对象的构造函数。如何确保父对象子对象处于可用状态(如果尚未初始化)?您可以尝试在LibraryClass
中创建“绕过”构造函数,并强制调用它,即通过特定参数。这肯定是我多年来见过的最新颖的bug修复方法;-)如果不想调用构造函数,可以malloc
原始类并用指针(或引用)指向它,但可能您必须自己构造对象。您正在调用BaseClass::BaseClass
构造函数;它将作为LibraryClass::LibraryClass
的先决条件的一部分被激发,这是您的先决条件。那么修复该错误如何?