2011-07-03 13 views
7

ZamiastDlaczego musimy zrobić szablon <class/typename> T, a nie tylko szablon T

template <typename T> 
void func(T arg) {/* something */} 

dlaczego nie możemy zrobić

template <T> 
void func(T arg) {/* something */} 

Od cplusplus.com:

Jedyną różnicą między prototypami jest użycie klasy słów kluczowych lub słowa kluczowego nazwatypu. Jego użycie jest niewyraźne, ponieważ oba wyrażenia mają dokładnie to samo znaczenie i zachowują się dokładnie tak samo, jak w przypadku metody .

To po prostu wydaje mi się niepotrzebną podstawą dla mnie.

Odpowiedz

11

http://www.cplusplus.com/doc/tutorial/templates/ Zobacz rozdział dotyczący parametrów innych niż szablony.

Potrzebujesz słowa kluczowego, aby odróżnić parametry typu od parametrów innych niż typy.

template <class T, int N> 
class mysequence { 
    T memblock [N]; 
    public: 
    void setmember (int x, T value); 
    T getmember (int x); 
}; 
+0

Lub nawet "szablon >", aby pokazać wszystkie trzy możliwe argumenty szablonu. – MSalters

8

Ponieważ argumenty szablonu nie zawsze są typami. Możesz mieć argument szablonu, który jest wartością całkowitą, na przykład, jak w przypadku std::bitset<size_t N>.

Powiązane problemy