簡體   English   中英

從模板化父級訪問子typedef

[英]Accessing child typedef from templatized parent

為什么以下內容無法編譯?

template <typename Child> struct Base
{
    typename Child::Type t; // Does not compile. "No type named Type in Child"
};

struct Derived : public Base<Derived>
{
    typedef int Type;
};

Base如何無法訪問其孩子的類型? 我用靜態函數而不是typedef嘗試了同樣的方法,並且效果很好。

我嘗試了GCC 4.4.2和clang 3.0。

此類代碼將不起作用,因為在實例化Base的那一刻,尚未完全定義Derived。 基本上它將是不完整的類型。

替代方案的范圍從簡單到非常復雜。 如果可能的話,最簡單的方法可能是避免使用Child :: Type,直到您真正需要它為止(本質上是惰性計算)。 如果確切說明您要實現的目標,這將有所幫助。

作為對stinky472答案的補充,如果您的base是擁有Type,那么您可能做的比

template<typename Child, typename Type>
struct base
{
     Type t;
};

   struct Derived : public Base<Derived, int>
{
};

它不是那么干凈。

暫無
暫無

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

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