Dyl*_*lan 5 c++ templates crtp
我有一个奇怪的重复模板模式类和派生类,如下所示:
template<class Derived>
class A {
typedef typename Derived::C D;
D x;
};
class B : public A<B> {
public:
class C { };
};
Run Code Online (Sandbox Code Playgroud)
由于在编译器尝试定义D时未完全定义B,因此无法编译.如何实现类似的结果,即具有B中定义的类型的A成员?或者我是否必须强制C在B之外定义?
或者我是否必须强制C在B之外定义?
是的,不幸的是你必须这样做.通常,您可以在之前定义模板类A
并将其专门化B
,包含该C
类型.这允许您使用它A
.
template<typename T>
struct members;
template<class Derived>
class A {
typedef typename members<Derived>::C D;
D x;
};
template<>
struct members<class B> {
class C { };
};
class B : public A<B> {
public:
};
Run Code Online (Sandbox Code Playgroud)
归档时间: |
|
查看次数: |
1012 次 |
最近记录: |