Этот код компилируется (Visual Studio 2013). Обратите внимание, что я передаю в Set
, а не Set<T>
, как параметр operator =, в тело функции, которое находится за пределами определения класса. Но я не могу вернуть Set
или его член Set
; он должен вернуть Set<T>
и быть членом Set<T>
.В классе функций класса членов класса вне определения класса, когда требуются параметры шаблона?
Где законно оставлять параметры шаблона? Inside the class definition, а где еще?
Это изменение в стандарте? Я пытаюсь поддерживать совместимость со всеми существующими версиями, в том числе 98.
template <typename T>
class Set
{
public:
Set() {}
const Set& operator=(const Set& rhs);
//Shouldn't this have to be
//const Set<T>& operator= (const Set<T>& rhs); ?
};
template <typename T>
const Set<T>& Set<T>::operator= (const Set& rhs) //<-- HERE
{
Set temp; //<-- AND HERE
/* ... */
return *this;
}
int main()
{
Set<int> S, T;
T = S;
}
AFAIK только классы делают это, так как они имеют нагнетаемого классовое имя – NathanOliver
и здесь: 'шаблон auto Set :: operator = (const Set &) -> const Set & ' –
' void main' недействителен и помешало бы многим (большинству) читателям попробовать ваш код. Я это исправил. Пожалуйста, не отправляйте код с 'void main', если вопрос об этом конкретно не упоминается, поскольку он вводит в заблуждение читателей новичков и делает невозможным просто копировать и вставлять код, чтобы попробовать, если только один из них не использует один из немногих компиляторов которые принимают его. –