Модераторы: Daevaorn

Поиск:

Ответ в темуСоздание новой темы Создание опроса
> Не разберусь с шаблонами, Ошибка линкера 
V
    Опции темы
PirateTigo
Дата 13.8.2008, 19:22 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Новичок



Профиль
Группа: Участник
Сообщений: 23
Регистрация: 4.8.2008

Репутация: нет
Всего: нет



Цитата(Alek86 @ 11.8.2008,  22:36)
и в приведеной тобой ссылке то же самое написано, что и у него

Вообще-то там приводится три выхода из ситуации, один из них мой. Поэтому не правда, что я сделал не подумав.
PM MAIL ICQ Skype   Вверх
UnrealMan
Дата 13.8.2008, 20:50 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Опытный
**


Профиль
Группа: Участник
Сообщений: 722
Регистрация: 30.3.2006

Репутация: 27
Всего: 32



Цитата(PirateTigo @  13.8.2008,  20:22 Найти цитируемый пост)
Вообще-то там приводится три выхода из ситуации, один из них мой. Поэтому не правда, что я сделал не подумав. 

Ответь на пару вопросов:

1) что в твоём примере делает следующая строчка?

friend std::istream &operator>><>(std::istream &,List<T> &);

2) Что в этой строчке означает <>?


PM MAIL   Вверх
PirateTigo
Дата 15.8.2008, 04:53 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Новичок



Профиль
Группа: Участник
Сообщений: 23
Регистрация: 4.8.2008

Репутация: нет
Всего: нет



Цитата(UnrealMan @ 13.8.2008,  20:50)
1) что в твоём примере делает следующая строчка?

friend std::istream &operator>><>(std::istream &,List<T> &);

2) Что в этой строчке означает <>?

Я не отвечаю на 100%, что это так. Так как сам ничего об этом раньше не слышал. Но раз в статье написано, что это решает проблему, то почему бы и не использовать эту "magic stuff" <>. И в той статье описано, что именно происходит, когда компилятор видит <>:
"After the compiler sees that magic stuff, it will be better informed about the friend functions. In particular, it will realize that the friend lines are referring to functions that are themselves templates. That eliminates the confusion." Мне этого описания вполне достаточно для того, чтобы использовать <> в своей программе, и то что я не нашел лучшего вовсе не означает, что я сделал это наобум.
PM MAIL ICQ Skype   Вверх
UnrealMan
Дата 15.8.2008, 12:08 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Опытный
**


Профиль
Группа: Участник
Сообщений: 722
Регистрация: 30.3.2006

Репутация: 27
Всего: 32



Я вот только не понял, откуда ты тогда сделал вывод, что

Цитата(PirateTigo @  4.8.2008,  15:13 Найти цитируемый пост)
Оказывается при объявлении дружественных шаблонов функций для шаблона класса нужно либо заранее объявлять прототипы класса и функции, либо писать <> после названия функции.
?
Почему "либо", когда предварительное объявление шаблона функции просто обязано присутствовать, если ты пишешь

Код

friend std::istream &operator>><>(std::istream &,List<T> &);
?

Это сообщение отредактировал(а) UnrealMan - 15.8.2008, 12:09
PM MAIL   Вверх
PirateTigo
Дата 19.8.2008, 12:57 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Новичок



Профиль
Группа: Участник
Сообщений: 23
Регистрация: 4.8.2008

Репутация: нет
Всего: нет



Ну не знаю, как я понял, потому что использование <> - это тоже самое для шаблона френд функции, что и extern для какой-нибудь внешней переменной. Если не так, то поправь меня.
PM MAIL ICQ Skype   Вверх
Alek86
Дата 19.8.2008, 13:23 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Эксперт
***


Профиль
Группа: Завсегдатай
Сообщений: 1299
Регистрация: 30.1.2007
Где: Киев

Репутация: 21
Всего: 25



Цитата(PirateTigo @  19.8.2008,  12:57 Найти цитируемый пост)
Если не так, то поправь меня.

как тебя можно поравить, если уже 10 раз было сказано, как нужно писать правильно, а ты все равно стоишь на своем?
можно только сказать РТФМ (в частности, "Шаблоны C++")


--------------------
user posted image    user posted image
PM MAIL   Вверх
bsa
Дата 19.8.2008, 14:23 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Эксперт
****


Профиль
Группа: Модератор
Сообщений: 9185
Регистрация: 6.4.2006
Где: Москва, Россия

Репутация: 63
Всего: 196



PirateTigo
Цитата
The solution is to convince the compiler while it is examining the class body proper that the operator+ and operator<< functions are themselves templates. There are several ways to do this; one simple approach is pre-declare each template friend function above the definition of template class Foo: 
Код
 template<typename T> class Foo;  // pre-declare the template class itself
 template<typename T> Foo<T> operator+ (const Foo<T>& lhs, const Foo<T>& rhs);
 template<typename T> std::ostream& operator<< (std::ostream& o, const Foo<T>& x); 

Also you add <> in the friend lines, as shown: 
Код
 #include <iostream>
 
 template<typename T>
 class Foo {
 public:
   Foo(const T& value = T());
   friend Foo<T> operator+ <> (const Foo<T>& lhs, const Foo<T>& rhs);
   friend std::ostream& operator<< <> (std::ostream& o, const Foo<T>& x);
 private:
   T value_;
 }; 
After the compiler sees that magic stuff, it will be better informed about the friend functions. In particular, it will realize that the friend lines are referring to functions that are themselves templates. That eliminates the confusion.
Свободный перевод особо важных мест в двух словах: первый метод заключается в предопределении шаблонных функции до описания шаблонного класса Foo... а так же (also - переводится как "а так же") добавлении <> в объявление дружественных шаблонных функций.
PM   Вверх
Ответ в темуСоздание новой темы Создание опроса
Правила форума "С++:Общие вопросы"
Earnest Daevaorn

Добро пожаловать!

  • Черновик стандарта C++ (за октябрь 2005) можно скачать с этого сайта. Прямая ссылка на файл черновика(4.4мб).
  • Черновик стандарта C (за сентябрь 2005) можно скачать с этого сайта. Прямая ссылка на файл черновика (3.4мб).
  • Прежде чем задать вопрос, прочтите это и/или это!
  • Здесь хранится весь мировой запас ссылок на документы, связанные с C++ :)
  • Не брезгуйте пользоваться тегами [code=cpp][/code].
  • Пожалуйста, не просите написать за вас программы в этом разделе - для этого существует "Центр Помощи".
  • C++ FAQ

Если Вам понравилась атмосфера форума, заходите к нам чаще! С уважением, Earnest Daevaorn

 
0 Пользователей читают эту тему (0 Гостей и 0 Скрытых Пользователей)
0 Пользователей:
« Предыдущая тема | C/C++: Общие вопросы | Следующая тема »


 




[ Время генерации скрипта: 0.0549 ]   [ Использовано запросов: 22 ]   [ GZIP включён ]


Реклама на сайте     Информационное спонсорство

 
По вопросам размещения рекламы пишите на vladimir(sobaka)vingrad.ru
Отказ от ответственности     Powered by Invision Power Board(R) 1.3 © 2003  IPS, Inc.