我的問題是,爲什麼下面的代碼無法編譯:爲什麼類級別的typedef不是從tempates繼承的?
template<typename t> class c1
{
public:
typedef int type_name;
void fn1(type_name x) {}
};
template<typename t> class c2 : public c1<t>
{
public:
void fn2(type_name x) {}
};
雖然以下作用:
class c1
{
public:
typedef int type_name;
void fn1(type_name x) {}
};
class c2 : public c1
{
public:
void fn2(type_name x) {}
};
正如你看到的,唯一的區別是,在第一種情況中的類模板。 Gcc和Clang抱怨type_name沒有在第二個類中定義(僅在模板版本中)。 typedef是不是從父類繼承的?如果是這樣,爲什麼它在非模板版本上工作?從模板使用typedefs時是否有一些例外情況?
此外,我知道我可以使用完全限定類型名稱來工作,即'typename c1 :: type_name'。我只想知道這是否是一些C++限制或編譯器錯誤。
那麼,模板類取決於模板參數,它們不會自動轉發。 –