簡體   English   中英

在CRTP類中使用派生類型的成員

[英]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.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM