我需要一些关于我的类层次结构设计的建议。我当前设计的“骨架”是
template <class X>
class BASE {
public:
virtual void f() {
x_.f2(m_);
}
void g() {
/* do stuff here*/
x_.g();
}
/* more member functions here*/
protected:
X x_;
int m_;
};
template <class X>
class DERIVED : BASE<X> {
public:
virtual f() override {
x_.f1();
}
protected:
using BASE<X>::x_;
using BASE<X>::m_;
};
最后我还有两个像这样的课程
struct X1 {
void f1();
void g();
};
struct X2 : X1 {
void f2(int m);
};
我希望能够创建一个DERIVED<X1>
. 为此,编译器将首先创建 的实例BASE<X1>
,在这种情况下,它会抱怨 X1 没有成员函数 f2(尽管实际上它永远不会被调用,因为调用函数 f() 是虚拟的)。
我知道这是一个糟糕的设计,因为为了拥有一个模板类,模板参数必须具有相同的接口。在我的例子中,X1 和 X2 有一个共同的接口,但 X2 有更多的功能,这就产生了上述问题。我知道我可以在 X1 中创建一个什么都不做的 f2 函数,但理想情况下我想避免这种情况。
我欢迎任何改进设计的建议。提前致谢!