![](/img/trans.png)
[英]CRTP with base class trying to get the return type of a derived class member: invalid use of incomplete type
[英]Use of member of derived type in CRTP class
我有一個奇怪的重復模板模式類和派生類,如下所示:
template<class Derived>
class A {
typedef typename Derived::C D;
D x;
};
class B : public A<B> {
public:
class C { };
};
由於在編譯器嘗試定義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:
};
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.