![]() |
|
Модераторы: Daevaorn |
![]()
|
|
| Jcs |
|
||||
|
Бывалый ![]() Профиль Группа: Участник Сообщений: 156 Регистрация: 1.10.2003 Репутация: нет Всего: нет |
Хочется специализировать функцию process для указателя SOURCE_TYPE*, т.е. по сути нужна частичная специализация
template<typename SOURCE_TYPE> template<typename DEST_TYPE> DEST_TYPE converter<SOURCE_TYPE>::process(SOURCE_TYPE item) {return DEST_TYPE(item);} //template<> template<typename SOURCE_TYPE> SOURCE_TYPE* converter<SOURCE_TYPE>::process<SOURCE_TYPE*>(SOURCE_TYPE item) {return &item;} Добавлено @ 19:41 прошу прощения
|
||||
|
|||||
| Олег М |
|
|||
![]() Опытный ![]() ![]() Профиль Группа: Участник Сообщений: 436 Регистрация: 10.6.2004 Где: Москва Репутация: 7 Всего: 7 |
Что-то страшное замутил. А что хотел сделать-то вообще?
У тебя SORCE_TYPE-то где-то объявлен? Что ты хотел специализировать? |
|||
|
||||
| Jcs |
|
|||
|
Бывалый ![]() Профиль Группа: Участник Сообщений: 156 Регистрация: 1.10.2003 Репутация: нет Всего: нет |
Хотелось бы сделать конвертер, который либо вызывал бы оператор преобразования типа, если таковой имеется, либо возвращал итем, либо его адрес. Вся эта хрень для того чтобы для функция, принимающая шаблонный контейнер, сама определяла, чего туда валить. Например - есть функция как-то получающая итемы (точки или еще чего-нить), если подсовываем ей контейнер адресов, то она валит туда указатели на итемы, если контейнер итемов - то, соответственно, сами итемы.
|
|||
|
||||
| Олег М |
|
|||
![]() Опытный ![]() ![]() Профиль Группа: Участник Сообщений: 436 Регистрация: 10.6.2004 Где: Москва Репутация: 7 Всего: 7 |
То есть, насколько я понял тебе нужны два контейнера, которые хранят либо объекты, либо указатели на объекты. А в качестве параметра в функцию добавления передаются объекты или ссылки на них. Ну так наверное проще будет переписать для специализации котнйнера функцию добавления, а не выдумывать.
Тем более у меня специализация на указатели в вижуал студии нифига не заработала. Такое ощущение что она там ваще не поддерживается |
|||
|
||||
| bel_nikita |
|
|||
![]() Эксперт ![]() ![]() ![]() ![]() Профиль Группа: Эксперт Сообщений: 2304 Регистрация: 12.10.2003 Где: Поезд №21/22 ( ст . Прага ) Репутация: 21 Всего: 47 |
|
|||
|
||||
| Jcs |
|
|||
|
Бывалый ![]() Профиль Группа: Участник Сообщений: 156 Регистрация: 1.10.2003 Репутация: нет Всего: нет |
Это как? Функция добавления-то одна. В контейнер адресов она валит указатели, в контейнер итемов - итемы соответственно. И на вход ей подается уже ссылка на элемент контейнера. А частичная специализация возможна тока в 7.1 . К примеру класс iteratоr_traits частично специализирован для указателей. Возможна проблема в том, что таким образом частично специализировать можно тока класс, а не его метод. |
|||
|
||||
| bel_nikita |
|
|||
![]() Эксперт ![]() ![]() ![]() ![]() Профиль Группа: Эксперт Сообщений: 2304 Регистрация: 12.10.2003 Где: Поезд №21/22 ( ст . Прага ) Репутация: 21 Всего: 47 |
Что-то я не понял. Если функция одна, и на ее вход подается либо указатель, либо ссылка, то какая проблема? Тогда и шаблоны не нужны |
|||
|
||||
| Олег М |
|
||||||
![]() Опытный ![]() ![]() Профиль Группа: Участник Сообщений: 436 Регистрация: 10.6.2004 Где: Москва Репутация: 7 Всего: 7 |
Что значит как? Спецификации-то разные. Значит разные классы. Переписывай специфичные методы и всё.
Не скажу точно что было - на так как написано в Страуструпе - в вижуал студии нифига не работает.
Наоборот на вход подаётся только ссылка, а внутри берётся либо ссылка либо указатель |
||||||
|
|||||||
| Jcs |
|
||||
|
Бывалый ![]() Профиль Группа: Участник Сообщений: 156 Регистрация: 1.10.2003 Репутация: нет Всего: нет |
У нас есть шаблонный класс, например, списка. У него есть метод push_back, который принимает ссылку на итем
Класс у нас не знает ничего о том, какого типа у него ITEM, указатель это или нет. У нас есть что-то, что хочет попасть в контейнер. Необходимо определить какого типа это что-то, привести его к тому что лежит в контейнере (взять адрес, если необходимо) и вызвать метод push_back. Если создать шаблонную функцию push_back
|
||||
|
|||||
| bel_nikita |
|
||||
![]() Эксперт ![]() ![]() ![]() ![]() Профиль Группа: Эксперт Сообщений: 2304 Регистрация: 12.10.2003 Где: Поезд №21/22 ( ст . Прага ) Репутация: 21 Всего: 47 |
Что-то я не пойму. Так контейнер, что должен хранить: указатель или целиком объект? Что должно быть на входе функции? Перегрузи функцию для поинтера и итема. Может все намного проще:
|
||||
|
|||||
| Jcs |
|
|||
|
Бывалый ![]() Профиль Группа: Участник Сообщений: 156 Регистрация: 1.10.2003 Репутация: нет Всего: нет |
Есть функция, на вход которой шаблонным параметром приходит контейнер и ссылка на итем для занесения туда. Если это контейнер указателей, то кладем туда адрес ссылки, если контейнер итемов - то саму ссылку.
|
|||
|
||||
| bel_nikita |
|
|||
![]() Эксперт ![]() ![]() ![]() ![]() Профиль Группа: Эксперт Сообщений: 2304 Регистрация: 12.10.2003 Где: Поезд №21/22 ( ст . Прага ) Репутация: 21 Всего: 47 |
Я так понял, проблема вот в этом:
Если VC6, то не выйдет. Только, если пойти по другому пути Это сообщение отредактировал(а) bel_nikita - 9.7.2004, 00:15 |
|||
|
||||
| Jcs |
|
|||
|
Бывалый ![]() Профиль Группа: Участник Сообщений: 156 Регистрация: 1.10.2003 Репутация: нет Всего: нет |
Да и в семь один тоже не особо получается(( Пришлось написать два адаптера push_item и push_ptr и их пихать в функцию.
|
|||
|
||||
![]()
|
| Правила форума "С++:Общие вопросы" | |
|
|
Добро пожаловать!
Если Вам понравилась атмосфера форума, заходите к нам чаще! С уважением, Earnest Daevaorn |
| 0 Пользователей читают эту тему (0 Гостей и 0 Скрытых Пользователей) | |
| 0 Пользователей: | |
| « Предыдущая тема | C/C++: Общие вопросы | Следующая тема » |
|
|
По вопросам размещения рекламы пишите на vladimir(sobaka)vingrad.ru
Отказ от ответственности Powered by Invision Power Board(R) 1.3 © 2003 IPS, Inc. |