ste*_*ten 1 c++ virtual constructor
我有鸡蛋 - 鸡蛋问题.
我想为容器类创建接口,这样我就可以强制执行特定的attr-accessors和其他方法,同时我希望能够从Containers构造函数中调用这些方法.
但正如我们所知,从Constructor调用虚方法将调用Base类方法,因为调用层次结构中的构造函数的顺序.
所以问题是我需要虚拟方法来强制实现,但这是我无法在构造函数中调用的东西.
编辑:我想要当我必须实现Container类(C1,C2 ...)来强制实现特定的方法,然后我希望能够在Container-constructors中使用这些方法.简单来说,我想实现INTERFACE要求,仅声明mixin.谢谢
你如何解决这个问题?
下面是代码示例.
#include <iostream>
using namespace std;
class Base {
public:
virtual void myvirt() { cout << "Base::virt()" << endl; };
};
class C1 : public Base {
public:
C1() {cout << "C1()" << endl; C1::myvirt(); };
C1(int i) { cout << "C1(int)" << endl; }
void myvirt() { cout << "C1::virt" << endl;}
};
class C2 : public Base {
public:
C2() {cout << "C2()" << endl; C2::myvirt();};
C2(int i) { cout << "C2(int)" << endl; }
void myvirt() { cout << "C2::virt" << endl;}
};
template<class C = C1>
class Sc: public C {
public:
Sc() : C() { cout << "Sc()" << endl; };
Sc(int n): C(n) { cout << "Sc(int)" << endl; };
};
int main() {
Sc<C2> $sx(12);
return 0;
}
Run Code Online (Sandbox Code Playgroud)
就像我要问的那样,有一些方法可以在特定的Constructors()的后代类中强制实现.像"虚拟构造器"之类的东西.
只需使构造函数变得微不足道,然后在构造函数返回后,调用某种初始化函数来完成对象的构造.您还可以使用克隆习语,具体取决于您希望如何决定要构造的对象类型.
您还可以拥有一个包装类,其构造函数首先构造内部类,然后调用其虚拟初始化函数.
更新:您可以像这样包装:
Class Wrapper : public Inner
{
public:
Wrapper(...) : Inner(...)
{
init();
}
virtual ~Wrapper();
}
Run Code Online (Sandbox Code Playgroud)
现在你可以做到
Wrapper foo(whatever);
Run Code Online (Sandbox Code Playgroud)
你可以foo像使用一样使用Inner.