簡體   English   中英

C++ Class 從模板 class 繼承而不知道類型?

[英]C++ Class inheriting from template class without knowing the type?

我正在設計一個模板 class Policy,它需要能夠處理指向其他類的指針。

template <class P>
class Policy
{
  private:   
    const P *state;
  public:
    Policy (P const* s) : state(s){};
};

這工作正常。 現在我想繼承上面的模板 class 並創建新的子類:

class Greedy : public Policy<???>
{
  public:
    template <typename P> Greedy (P const* s) : Policy(s) {}:
};

class Explora : public Policy<???>
{ 
  public:
    template <typename P> Explora (P const* s) : Policy(s) {}:
};

問題是在定義這些類時,我不知道它們將用於基本模板 class 的類型。 這甚至可能嗎? 我想要從繼承的 class 構造函數(可能是模板化的)獲得的類型,然后將其傳遞給基礎 class 構造函數。 我可以這樣做嗎? 如果是,如何? 類型定義枚舉? 我見過這個問題,但我認為它並沒有真正回答這個問題。

使它們成為模板類:

template <typename P>
class Greedy : public Policy<P>
{
    // now you know
};

您當然可以這樣做(有關派生類型的正確參數化,請參閱 GMan 的答案),但請記住,您將為每種類型P獲得完全獨立的 class 層次結構。 您不會神奇地創建具有任意數量成員類型的超級 class。

將模板視為代碼生成工具。 他們不創建“類型通用類型”,而是在編譯時按照通用模式創建大量具體的 static 類型的並行實例


如果你真的想要一個單一的通用基本類型,也許你可以使state的類型多態:

class Policy // no template
{
  StateBase * state;
public:
  Policy(StateBase * s) : state(s) { }
};

然后你的所有派生類都可以訪問狀態的公共接口。

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

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