Thi*_*man 2 c++ virtual templates abstract-class multiple-inheritance
在我的班级设计中遇到了以下问题:
class MyData
{
int foo;
};
class AbstraktA
{
public:
virtual void A() = 0;
};
class AbstraktB : public AbstraktA
{
public:
virtual void B() = 0;
};
template<class T>
class ImplA : public AbstraktA
{
public:
void A(){ cout << "ImplA A()"; }
};
class ImplB : public ImplA<MyData>, public AbstraktB
{
public:
void B(){ cout << "ImplB B()"; }
};
void TestAbstrakt()
{
AbstraktB *b = (AbstraktB *) new ImplB;
b->A();
b->B();
};
Run Code Online (Sandbox Code Playgroud)
上面代码的问题是编译器会抱怨AbstraktA :: A()没有定义.
接口A由多个对象共享.但是A的实现取决于模板参数.界面B是外界所看到的,需要abstrakt.
我想这样做的原因是它允许我像这样定义对象C:定义继承自abstrakt的接口C.使用模板A的不同数据类型定义C的实现.
我希望我很清楚.有没有办法做到这一点,还是我需要重新考虑我的设计?
你有两个AbstracktA继承路径,你只在其中一个中实现AbstraktA :: A(),所以编译器会抱怨.
您可能希望在两种情况下都从AbstraktA虚拟继承,因此只有一个AbstraktA基础对象(virtual在AbstraktA之前添加).
| 归档时间: |
|
| 查看次数: |
293 次 |
| 最近记录: |