![]() |
|
Модераторы: Daevaorn |
![]()
|
|
| np9mi7 |
|
||||
![]() Опытный ![]() ![]() Профиль Группа: Участник Сообщений: 553 Регистрация: 17.8.2003 Где: Volgograd, Russia Репутация: 5 Всего: 10 |
Добрый день.
Есть шаблон функтора:
Можно ли его частично специализировать в зависимости: T - указатель или нет? Если да, то как? Это важно, потому как влияет на реализацию оператора ():
Заранее спасибо за помощь. |
||||
|
|||||
| srd |
|
|||
![]() Нереварин ![]() ![]() Профиль Группа: Участник Клуба Сообщений: 951 Регистрация: 30.8.2003 Где: Владивосток Репутация: 27 Всего: 49 |
Гм, а если попробовать обойтись без частичной специализации?
-------------------- Не смей читать мою подпись!!! |
|||
|
||||
| Fantasist |
|
|||
|
Лентяй ![]() ![]() ![]() Профиль Группа: Участник Клуба Сообщений: 1517 Регистрация: 24.3.2002 Репутация: 4 Всего: 41 |
np9mi7 можно:
Добавлено @ 19:40 Только компилятор должен поддерживать частичную специализацию. Если нет, то можно ее эмулировать, но это посложнее. -------------------- Волны гасят ветер... |
|||
|
||||
| np9mi7 |
|
||||||||
![]() Опытный ![]() ![]() Профиль Группа: Участник Сообщений: 553 Регистрация: 17.8.2003 Где: Volgograd, Russia Репутация: 5 Всего: 10 |
Да этот вариант вполне работает, ведь компилятор ищет подходящую подстановку и находит её Но в таком методе есть проблема: теперь от
Поэтому и хотелось частично специализировать... Fantasist, компилятор MSVC .net 2003:
почемуто он так не хочет частично специализировать Это сообщение отредактировал(а) np9mi7 - 17.6.2005, 21:08 |
||||||||
|
|||||||||
| bel_nikita |
|
|||
![]() Эксперт ![]() ![]() ![]() ![]() Профиль Группа: Эксперт Сообщений: 2304 Регистрация: 12.10.2003 Где: Поезд №21/22 ( ст . Прага ) Репутация: 21 Всего: 47 |
Попробуй так:
|
|||
|
||||
| Earnest |
|
|||
![]() Эксперт ![]() ![]() ![]() ![]() Профиль Группа: Экс. модератор Сообщений: 5962 Регистрация: 17.6.2005 Где: Рязань Репутация: 53 Всего: 183 |
Нет, так тоже не правильно: при специализации второй список должен содержать все аргументы.
Это сообщение отредактировал(а) Earnest - 18.6.2005, 07:16 -------------------- ... |
|||
|
||||
| Earnest |
|
||||||
![]() Эксперт ![]() ![]() ![]() ![]() Профиль Группа: Экс. модератор Сообщений: 5962 Регистрация: 17.6.2005 Где: Рязань Репутация: 53 Всего: 183 |
Нет, так тоже неправильно: список аргументов во вторых скобках должен быть полным. Формально, правильно так:
Это объявление само по себе компилируется, но дальше не помогает. В смысле, использовать не удается.
Почему - непонятно... А вообще, как задача-то стоит? Как предполагается этот шаблон применять? Вывести тип шаблон, не указывая явно тип аргументов, не получится - это ведь не функция. Зато если использовать boost:: bind, то можно написать так:
И не надо никаких шаблонов... -------------------- ... |
||||||
|
|||||||
| Fantasist |
|
||||
|
Лентяй ![]() ![]() ![]() Профиль Группа: Участник Клуба Сообщений: 1517 Регистрация: 24.3.2002 Репутация: 4 Всего: 41 |
Да, конечно, список аргументов должен быть полным. И тип аргументов у оператора() тоже должен быть изменен соотвественно. Спасибо за поправку.
А как ругается-то хоть? -------------------- Волны гасят ветер... |
||||
|
|||||
| Earnest |
|
|||
![]() Эксперт ![]() ![]() ![]() ![]() Профиль Группа: Экс. модератор Сообщений: 5962 Регистрация: 17.6.2005 Где: Рязань Репутация: 53 Всего: 183 |
Вот (MSVC.NET 2003):
Я так понимаю, 2-я и 3-я ошибки уже производные. А 1-я - не нравится ему несоответствие объявления шаблона template <class T, int (T::*pfn...() const> и применения __compare<Test*,Test::CreateView>... -------------------- ... |
|||
|
||||
| srd |
|
|||
![]() Нереварин ![]() ![]() Профиль Группа: Участник Клуба Сообщений: 951 Регистрация: 30.8.2003 Где: Владивосток Репутация: 27 Всего: 49 |
Вот так работает в MSVC++ 2003 .NET
Вот как бы от третьего аргумента избавиться -------------------- Не смей читать мою подпись!!! |
|||
|
||||
| Chaos A.D. |
|
|||
![]() Бывалый ![]() Профиль Группа: Участник Сообщений: 172 Регистрация: 16.1.2005 Где: 09 RUS Репутация: 6 Всего: 7 |
А почему бы не передавать указатель на функцию-член в качестве параметра конструктору функтора? Как мне кажется, это решит все проблемы.
--------------------
Надо смеяться над тем, что тебя мучит, иначе не сохранишь равновесия, иначе мир сведет тебя с ума...Ken Kesey - One Flew Over The Cocoo's Nest |
|||
|
||||
| Earnest |
|
|||
![]() Эксперт ![]() ![]() ![]() ![]() Профиль Группа: Экс. модератор Сообщений: 5962 Регистрация: 17.6.2005 Где: Рязань Репутация: 53 Всего: 183 |
И то правда, Chaos.
-------------------- ... |
|||
|
||||
| Chaos A.D. |
|
|||
![]() Бывалый ![]() Профиль Группа: Участник Сообщений: 172 Регистрация: 16.1.2005 Где: 09 RUS Репутация: 6 Всего: 7 |
Вот пример, как я заюзал такую идею :
--------------------
Надо смеяться над тем, что тебя мучит, иначе не сохранишь равновесия, иначе мир сведет тебя с ума...Ken Kesey - One Flew Over The Cocoo's Nest |
|||
|
||||
![]()
|
| Правила форума "С++:Общие вопросы" | |
|
|
Добро пожаловать!
Если Вам понравилась атмосфера форума, заходите к нам чаще! С уважением, Earnest Daevaorn |
| 0 Пользователей читают эту тему (0 Гостей и 0 Скрытых Пользователей) | |
| 0 Пользователей: | |
| « Предыдущая тема | C/C++: Общие вопросы | Следующая тема » |
|
|
По вопросам размещения рекламы пишите на vladimir(sobaka)vingrad.ru
Отказ от ответственности Powered by Invision Power Board(R) 1.3 © 2003 IPS, Inc. |