ЖИТЬ
аюсь написать свой собственный класс векторных шаблонов, но у меня есть некоторые проблемы при написании объявлений функций друзей.
Сначала я написал так:
template <typename T, typename Alloc = std::allocator<T>>
class vector {
public:
friend bool operator==(const vector<T, Alloc>&, const vector<T, Alloc>&);
};
Но компилятор выдает предупреждение, что я объявляю не шаблонную функцию. Поэтому я изменил объявление друга на это:
template <typename T, typename Alloc = std::allocator<T>>
class vector {
public:
template <typename E, typename F>
friend bool operator==(const vector<E, F>&, const vector<E, F>&);
};
Пока все хорошо, но я думаю, что есть еще проблемы. Если я пишу так, я делаю всеoperator==
функции, которые принимают два аргумента шаблона в качестве своих вспомогательных функций. Например,operator==(const vector<int>&, const vector<int>&)
а такжеoperator==(const vector<double>&, const vector<double>&)
оба будутvector<int>
Друг функции.
Как правильно написать функции-друзья в классе шаблона?