C++ 从纯抽象基继承typedef
编辑:找到 我将一些问题代码缩减为最简单的工作案例,以说明以下内容:我的纯抽象基类中的typedef没有被派生类继承。在下面的代码中,我想将C++ 从纯抽象基继承typedef,c++,design-patterns,inheritance,typedef,template-method-pattern,C++,Design Patterns,Inheritance,Typedef,Template Method Pattern,编辑:找到 我将一些问题代码缩减为最简单的工作案例,以说明以下内容:我的纯抽象基类中的typedef没有被派生类继承。在下面的代码中,我想将系统\u ttypedef继承到ConcreteTemplateMethod: #include <iostream> // pure abstract template-method template <typename T> // T == Analyzer<U> class TemplateMethod {
系统\u t
typedef继承到ConcreteTemplateMethod
:
#include <iostream>
// pure abstract template-method
template <typename T> // T == Analyzer<U>
class TemplateMethod {
public:
typedef T system_t;
virtual void fn (const system_t& t) const = 0;
};
template <typename T>
class Analyzer {
public:
void TemplatedAlgorithm (const TemplateMethod< Analyzer <T> >& a) const {
printf ("Analyzer::TemplatedAlgorithm\n");
a.fn(*this); // run the template-method
}
void fn () const {
printf ("Analyzer::fn\n");
}
};
// concrete template-method
template <typename T>
class ConcreteTemplateMethod : public TemplateMethod < Analyzer<T> > {
public:
typedef Analyzer<T> system_t;
virtual void fn (const system_t& t) const {
printf ("ConcreteTemplateMethod::fn\n");
t.fn(); // perform Analyzer's fn
}
};
int main () {
Analyzer <double> a;
ConcreteTemplateMethod<double> dtm;
a.TemplatedAlgorithm(dtm);
return 0;
}
但是,请注意,system\u t
类型已经在基类中定义了typedef
。为什么在继承时必须包含另一个typedef
我意识到我可以通过使用typename TemplateMethod::system\u t&
在派生的ConcreteTemplateMethod
中限定system\u t
的类型名,但这有点冗长,我希望避免每次继承并需要使用相同的系统时都必须将typedef
重新添加到基。是否有一种方法可以在baseTemplateMethod
中定义?您应该这样做
typedef typename TemplateMethod<X>::system_t system_t;
typedef typename TemplateMethod::system\u t system\t;
“继承”typedef。typedef不会自动继承(如果编译器兼容)
如果您查看堆栈溢出,就会发现这个问题在某个地方重复。不,您不能直接这样做。但是,您可以编写一个宏来执行此操作。的可能重复
typedef typename TemplateMethod<X>::system_t system_t;