В чем разница между написанием шаблона на c ++ в обоих случаях:
template<typename T> & template<class T>
template<typename T>
template<class T>
а когда мы предпочитаем их друг другу? Если оба одинаковы, то зачем нам оба, если одного достаточно?
Нет разницы вообще. Я предпочитаю первый (в основном), но это мой личный вкус. Язык не имеет никакого значения между ними.
Для параметров шаблона ключевые слова typename и class эквивалентны. § 14.1.2 говорит:
typename
class
Нет семантической разницы между классом и typename в Шаблон-параметр.
Если оба одинаковы, то зачем нам их оба, если одного достаточно?
Стэн Липпман объясняет это в своей статье:
Почему C ++ поддерживает как класс, так и имя типа для параметров типа?
Эти ключевые слова существуют по историческим причинам.Там нет никакой разницы между ними.Читать это: http://blogs.msdn.com/b/slippman/archive/2004/08/11/212768.aspx