Почему мы должны сделать шаблонT вместо просто шаблона T - PullRequest
7 голосов
/ 03 июля 2011

Вместо

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

почему мы не можем сделать

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

От cplusplus.com:

Единственная разница между обоими прототипамииспользование либо класса ключевого слова, либо ключевого слова typename.Его использование нечеткое, поскольку оба выражения имеют одинаковое значение и ведут себя одинаково.

Мне это кажется ненужным образцом.

Ответы [ 2 ]

11 голосов
/ 03 июля 2011

http://www.cplusplus.com/doc/tutorial/templates/ См. Раздел о нетиповых параметрах для шаблонов.

Вам нужно ключевое слово, чтобы отличать параметры типа от параметров, не относящихся к типу.

template <class T, int N>
class mysequence {
    T memblock [N];
  public:
    void setmember (int x, T value);
    T getmember (int x);
};
8 голосов
/ 03 июля 2011

Потому что аргументы шаблона не всегда являются типами. Вы можете иметь шаблонный аргумент, который является целочисленным значением, например, как в случае std::bitset<size_t N>.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...