【发布时间】:2009-03-09 12:45:02
【问题描述】:
谁能想出一个好方法来让下面的代码工作? (这又是一种非常简单的方法)
template <class f, class g> class Ptr;
class RealBase
{
};
template <class a, class b, class c = Ptr<a,b> >
class Base : public RealBase
{
public:
Base(){};
};
template <class d, class e>
class Derived : public Base <d,e>
{
public:
Derived(){};
void DerivedMethod(){};
};
template <class f, class g>
class Ptr
{
public:
Ptr(){};
Ptr(Base<f,g,Ptr<f,g> >* a){in = a;};
Base<f,g,Ptr<f,g> >* operator->()
{
return in;
};
private:
Base<f,g,Ptr<f,g> >* in;
};
typedef Derived<double,double> DDerived;
int main()
{
Base<int,int> b = Base<int,int>();
Derived<double,double> d = Derived<double,double>();
DDerived dd = DDerived();
Ptr<double,double> p(&dd);
p->DerivedMethod();
return 1;
}
目前编译器抱怨,因为 Base 没有 DerivedMethod();
编辑
我确实理解这里的问题,因为在第一种情况下缺乏解释(我很着急),这很糟糕。 [顺便说一句,这是非常精简的代码,是的,为了简单起见,我没有实际执行任何操作的析构函数或方法。忽略这一点,对问题没有影响。]
我需要做的是,仅处理派生类 (D_Derived) 的迭代器(此处未详细说明)需要访问包含在派生类而不是基类中的方法。简单地将这个方法插入基类并不是一个真正的选择,因为如果我必须这样做,这个错误将会发生很多。 (大约有 10 个类建立在真正的基类上,它们都有自己的派生方法。就像其中的 20 个。每个。)
谁能想到另一种方法来实现此功能?
【问题讨论】:
标签: c++ inheritance