【发布时间】:2014-06-11 17:57:33
【问题描述】:
我有一个具有虚函数的基类。我想在构造过程中调用该类,因为我希望为每个派生类调用该函数。我知道在构造过程中我不能调用虚函数,但我想不出一个优雅的(即避免重复代码)解决方案。
在构造过程中调用虚函数有哪些变通方法?
我想避免这种情况的原因是我不想创建只调用基类的构造函数。
class A {
public:
A() {
read();
}
// This never needs to be called
virtual void read() = 0;
}
class B:A {
public:
B():A() { };
read() { /*Do something special for B here.*/ }
}
class C:A {
public:
C():A() { };
read() { /*Do something special for C here.*/ }
}
PS:Python 的做法很简单,就是在A::read() 中输入raise NotImplementedError。我正在回归 C++,但我比我想象的还要生疏。
【问题讨论】:
-
你对课堂布局有什么限制?至少部分自动化的一种方法是将 CRTP 类添加到您的类层次结构中。
-
到目前为止,我没有太多限制。我以前从未听说过 CRTP。我去看看。
-
你可以在构造过程中调用虚函数,但它会是你所在的构造函数的类的实现。
-
??那么,您想在构造派生之前在基类中调用属于派生类的函数吗?馊主意。或者你想调用一个后构造器,在这种情况下解决方案是工厂方法?
-
很好地讨论了解决此类问题的几种方法:isocpp.org/wiki/faq/…
标签: c++ constructor virtual