只是想知道C++ typename
,用於告訴解析器某些符號是類型。爲什麼我們必須在typedef
之後使用它而不是繼承?typedef中的typename與繼承的用法
示例:假設你有這樣的
struct C { /* a class */ };
template<class T> struct S {
typedef C type; // S<T>::type is a type
};
什麼困擾我的是這樣的:
template<class T> struct Typedef {
typedef typename S<T>::type MyType; // needs typename
};
template<class T> struct Inheritance
: S<T>::type // doesn't need typename
{ };
在這兩種情況下,解析器應該期待一個類型,所以它可以解析S<T>::type
爲一體。爲什麼它只爲繼承而不是typedefs?該模式似乎同樣對我說:
typedef $type$ $new_symbol$;
class $new_symbol$ : $type$ { $definition$ };
還是有的typedef
使用情況我不知道,這讓這個曖昧? PS:我很肯定這已經被問到了,但是我找不到(有很多噪音與typename
關鍵字有關)。這個問題只是關於語法,而不是使用繼承或typedefs更好。如果有重複的話,我提前道歉。
它已經被回答過。看看這裏:http://stackoverflow.com/questions/610245/where-and-why-do-i-have-to-put-the-template-and-typename-keywords – lapk
@PetrBudnik該鏈接不實際上包含對這個特定問題的答案。 –
@KonradRudolph它確實如此,非常詳細。閱讀接受的答案部分**「typename」關鍵字**和**其他註釋和示例**。 – lapk