我正在编写一些使用来自另一个库的类型和函数的类。此库在调用任何其他函数之前需要初始化。此外,类使用库提供的数据类型,这些数据类型也必须在使用之前(但在初始化库之后)初始化。这些类如下所示:
class A {
public:
A() { init(); }
void init() { lib_type_init(&t); }
// ...
// Other methods
// ...
protected:
lib_type t;
// ...
// Other fields
// ...
}我不想在A实例上显式调用A,因为我的应用程序中有很多A实例,所以我在构造函数中调用了init()。但是,当我想在全局范围内定义一个A实例时,这就出现了一个问题。因此,我认为继承是正确的答案,只需提供一个不调用init()的构造函数,并要求应用程序在全局实例中使用之前显式调用init()。例如:
class global_A : public A {
public:
global_A() {}
}但是,这仍然是一个问题,因为在C++中,如果构造函数没有参数,则由派生类调用基类构造函数。这显然会导致在运行时调用对象的全局构造函数(它试图调用库init函数并产生错误,因为库本身没有初始化)。
这些类有相当多的方法,我不希望我的代码变大。这么说,除了将A完全复制到global_A sans构造函数之外,还有更好的方法来解决这个问题吗?
发布于 2014-11-07 18:20:32
在基类上创建一个不调用init()的非默认构造函数。在全局类构造函数的初始化列表中显式调用此非默认构造函数。
https://stackoverflow.com/questions/26807064
复制相似问题