2011-07-03 11 views
7

yerineNeden şablonu yapmalıyız <class/typename> T yerine şablon T

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

arasında neden yapamaz cplusplus.com itibaren

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

:

Hem prototipleri arasındaki tek fark, anahtar sözcük sınıfının veya typename anahtar sözcüğünün kullanılmasıdır. Her ikisi de ifadeleri tam olarak aynı anlam ve aynı yolunu aynı şekilde davranır çünkü kullanımı belirsizdir.

Sadece bana gereksiz boilerplate gibi görünüyor.

cevap

11

http://www.cplusplus.com/doc/tutorial/templates/ Şablonlar için Olmayan parametreler bölümüne bakın. Tür parametrelerini tür dışı parametrelerden ayırmak için bazı anahtar sözcüklere ihtiyacınız vardır.

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

ya da 'şablon, tüm üç olası şablon bağımsız değişkenler göstermek için, ' int>. – MSalters

8

Şablon bağımsız değişkenleri her zaman türleri olmadığından. Örneğin, std::bitset<size_t N> örneğinde olduğu gibi, bir integral değeri olan bir şablon argümanına sahip olabilirsiniz.

İlgili konular