2011-05-01 27 views
9

W nagłówkach biblioteka C++, będziemy czasem zobaczyć następujące czynności, aby poprawić czytelność kodu wewnątrz klasy:Czy mogę wpisać parametr szablonu szablonu?

template<typename MyExplicitelyLongTemplateParameter> 
class C 
{ 
public: 
    typedef MyExplicitelyLongTemplateParameter P; 

    // Use "P" and keep your sanity. 
}; 

Moje pytanie jest, można zrobić to samo z parametrem szablonu szablonu?

template<template<typename> typename MyExplicitelyLongTemplateParameter> 
class C 
{ 
public: 
    typedef /* ??? */ P; 

    // Use "P" and keep your sanity. 
}; 
+0

ja nie zetknąć się z tym składnia przed. Co to robi? – yuriks

+4

Myślę, że powinien to być szablon klasa MyExplicitelyLongTemplateParameter> – ymett

Odpowiedz

3

W bieżącym standardzie nie można wpisywać szablonu. W nowym, nadchodzącym standardzie, będzie w stanie ....

+4

A jak ktoś będzie w stanie wprowadzić nowy typ w nowym standardzie? – Werner

8

Nie można tworzyć typedef nie, ale można skrócić nazwę:

template <template <typename> typename MyExplicitlyLongTemplateParameter> 
class C 
{ 
public: 

    template <typename T> 
    struct P 
    { 
     typedef MyExplicitlyLongTemplateParameter<T> Type; 
    }; 

    // Use "P<T>::Type" and keep your sanity. 
}; 
+1

+1, ale jak zaznaczono w komentarzach powyżej, powinna to być naprawdę klasa