ANTICHAT.XYZ    VIDEO.ANTICHAT.XYZ    НОВЫЕ СООБЩЕНИЯ    ФОРУМ  
Баннер 1   Баннер 2
Antichat снова доступен.
Форум Antichat (Античат) возвращается и снова открыт для пользователей. Здесь обсуждаются безопасность, программирование, технологии и многое другое. Сообщество снова собирается вместе.
Новый адрес: forum.antichat.xyz
Вернуться   Форум АНТИЧАТ > Программирование > С/С++, C#, Delphi, .NET, Asm
   
 
 
Опции темы Поиск в этой теме Опции просмотра

Жёсткая задачка про ООП в С++
  #1  
Старый 14.06.2007, 00:16
Аватар для pch
pch
Познающий
Регистрация: 22.10.2005
Сообщений: 37
Провел на форуме:
520745

Репутация: 141
По умолчанию Жёсткая задачка про ООП в С++

Прелюдия (можно смело пропустить)
Вообщем хочется написать класс полиномов над некоторым типом aType так, чтобы операции были понолстью френд-перегружены, т.е. чтобы работало int==Polynom<int>, int*Polynom<int> и другие приятности.
В не-шаблонном случае это - тривиальнейшая задача. Как только я ввожу шаблоны, aType престаёт приводиться к Polynom, хотя конструктор Polynon<int> имеется. Если выкинуть контекст, и оставить только саму проблему, то получится

Задача
Заставить работать парой волшебных пассов
Код:
#include <iostream>
using namespace std;

template <class aType>
class testClass{
public:
       aType data;
       testClass(aType c): data(c) {}
       bool friend operator==<aType>(testClass<aType>, testClass<aType>);
};
template <class aType>
bool operator==(testClass<aType> a, testClass<aType> b){
       return a.data==b.data;
}
int main(){
       int a=4;
       testClass<int> b(4);
       if (a==b) cout << "a equals b\n";
       if (b==a) cout << "b equals a\n";
}
В таком состоянии выдает две ошибки:
Код:
no match for `testClass<int> & == int &`
no match for `int & == testClass<int> &`
Если вызывать явные конструкторы Polynom(a)==b, всё работает, но тогда инкапсуляция и всё изящество идёт лесом.

Действительно хоть какое-то решение - делать приведения явно, но внутри класса. Т.е. добавив
Код:
      
bool friend operator==<aType>(aType a, testClass b<aType>);
bool friend operator==<aType>(testClass a<aType>, aType b);
Ни в одной книге попавшейся мне, включая Строуструпа, этого нет. Но кажется совсем сомнительным, что это невозможно, это ж С++!!! Вообщем, надеюсь прояснить этот вопрос
 
Ответить с цитированием
 



Похожие темы
Тема Автор Раздел Ответов Последнее сообщение
Про одно всё, про  одно..... Николь Болталка 20 01.02.2009 18:31
Про нас, про мужчин! SladerNon Болталка 27 21.02.2007 16:44
Про банеры, за которые деньги платят... temp_late Болталка 7 27.08.2006 05:54
Статья от novichka про АНтичат. Егорыч+++ Болталка 48 14.07.2006 17:09



Здесь присутствуют: 1 (пользователей: 0 , гостей: 1)
 


Быстрый переход




ANTICHAT.XYZ