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