У меня есть следующая проблема/вопрос: Предположим, что у меня есть класс шаблонов Пара, у которых есть два атрибута x и y типа xobject. я могу легко определить сумму между парой одного и того же класса просто определяющий элемент суммы по элементу, если она определена сумма объекта шаблона, то есть:Специализация операторов внутри класса шаблона между объектами различной специализации этого класса
Couple operator+(Couple in)
{
return Couple((*this).x+in.x,(*this).y+in.y);
}
С этой реализации я могу вычислить сумму между Couple<int>
элемент. Я не совсем понимаю, как я могу определить сумму между Couple<int>
и Couple<something>
внутри этого класса. Проблема заключается в том, что я не могу специализироваться сумму внутри класса между классами, которые еще не реализованы, то есть, я не могу писать
Couple<'int'> Couple<'int'>::operator+(Couple<'something'>)
внутри класса пара.
Вы знаете, как это сделать?
Моя первая идея состояла в том, чтобы использовать второй параметр шаблона внутри оператора, но результаты были не очень хорошими, так как я допускаю только одну сумму стиха, а не в обоих стихах.
Надеюсь, что я объяснил проблему достойным образом.
Вам действительно нужны специализации? Обычно вы должны использовать что-то вроде 'template struct foo {template foo operator + (foo rhs) {stuff}};' –
NathanOliver
Если вы хотите применить преобразования типов по всем параметрам (включая те, на которые указывает 'this') к функции функция должна быть, по крайней мере, нечленой функцией (может даже функция друга). – SebNag
Двойной шаблон не должен работать, так как сумма пары и пара отличается от суммы. Пара и пара (она отличается для вывода, и я не хочу использовать C++ 14). –
Nicola