![]() |
Модераторы: Daevaorn |
![]() ![]() ![]() |
|
zss |
|
||||
![]() Опытный ![]() ![]() Профиль Группа: Участник Сообщений: 708 Регистрация: 17.6.2004 Репутация: 1 Всего: 2 |
Есть немного странная задача.
Нужно создать класс (на основе шаблонов) который мог бы вызывать функции 2 типов. 1 тип - обычная функция 2 тип - метод класса например
и
только вот зотелось бы с помощью шаблонов создать один класс, который в конструкторе будет принимать указатель либо на фуннкцию, либо на метод - ну и соответственно дергать нужную |
||||
|
|||||
Mayk |
|
|||
![]() ^аВаТаР^ сообщение>> ![]() ![]() ![]() ![]() Профиль Группа: Участник Сообщений: 2616 Регистрация: 22.5.2005 Где: за границей разум а Репутация: 45 Всего: 134 |
Метод в лоб, пишу на коленке, выдумывать элегантное решение в лом
Думаю идея понятна ![]() Это сообщение отредактировал(а) Mayk - 17.12.2005, 19:52 -------------------- Здесь был кролик. Но его убили. Человеки < кроликов, йа считаю. |
|||
|
||||
zss |
|
|||
![]() Опытный ![]() ![]() Профиль Группа: Участник Сообщений: 708 Регистрация: 17.6.2004 Репутация: 1 Всего: 2 |
Mayk, спасибо - хорошее решение
а что - можешь еще лучше предложить ![]() |
|||
|
||||
Mayk |
|
|||
![]() ^аВаТаР^ сообщение>> ![]() ![]() ![]() ![]() Профиль Группа: Участник Сообщений: 2616 Регистрация: 22.5.2005 Где: за границей разум а Репутация: 45 Всего: 134 |
Могу предложить попробовать обойтись без использования доп классов. Правда это нечитабельнее
Что-то типа (часть кода за вызов ф-ции и очевидный деструктор опущу)
Не сказал бы что это лучше :-) Вывод - очевидные решения предпочтительнее неочевидных ![]() Это сообщение отредактировал(а) Mayk - 17.12.2005, 20:28 -------------------- Здесь был кролик. Но его убили. Человеки < кроликов, йа считаю. |
|||
|
||||
zss |
|
|||
![]() Опытный ![]() ![]() Профиль Группа: Участник Сообщений: 708 Регистрация: 17.6.2004 Репутация: 1 Всего: 2 |
Mayk, что-то никак не соберу
не хочет так ![]() Это сообщение отредактировал(а) zss - 17.12.2005, 21:15 |
|||
|
||||
Mayk |
|
|||
![]() ^аВаТаР^ сообщение>> ![]() ![]() ![]() ![]() Профиль Группа: Участник Сообщений: 2616 Регистрация: 22.5.2005 Где: за границей разум а Репутация: 45 Всего: 134 |
Почитай сообщения об ошибках
![]()
-------------------- Здесь был кролик. Но его убили. Человеки < кроликов, йа считаю. |
|||
|
||||
zss |
|
||||
![]() Опытный ![]() ![]() Профиль Группа: Участник Сообщений: 708 Регистрация: 17.6.2004 Репутация: 1 Всего: 2 |
Mayk, я так понимаю ты подправил
мой косяк - упустил ![]()
говорит, что не может конвертнуть StaticCaller* в Callerimpl* - странно ... |
||||
|
|||||
Mayk |
|
||||
![]() ^аВаТаР^ сообщение>> ![]() ![]() ![]() ![]() Профиль Группа: Участник Сообщений: 2616 Регистрация: 22.5.2005 Где: за границей разум а Репутация: 45 Всего: 134 |
g++ ругался, что arg_ не найден. Добавлено @ 22:15 Стоп. Понял.
Так нельзя - arg_ принадлежит базовому классу, который УЖЕ проинициализирован. => инициализировать его нельзя -------------------- Здесь был кролик. Но его убили. Человеки < кроликов, йа считаю. |
||||
|
|||||
zss |
|
|||
![]() Опытный ![]() ![]() Профиль Группа: Участник Сообщений: 708 Регистрация: 17.6.2004 Репутация: 1 Всего: 2 |
значит придется заводить arg_ для каждого наследника ? З.Ы. Попробовал - не прокатило Это сообщение отредактировал(а) zss - 17.12.2005, 22:21 |
|||
|
||||
Mayk |
|
||||||||
![]() ^аВаТаР^ сообщение>> ![]() ![]() ![]() ![]() Профиль Группа: Участник Сообщений: 2616 Регистрация: 22.5.2005 Где: за границей разум а Репутация: 45 Всего: 134 |
Не обязательно
Вот это работает ![]() Добавлено @ 22:24
компилятор даже знает почему -------------------- Здесь был кролик. Но его убили. Человеки < кроликов, йа считаю. |
||||||||
|
|||||||||
zss |
|
||||
![]() Опытный ![]() ![]() Профиль Группа: Участник Сообщений: 708 Регистрация: 17.6.2004 Репутация: 1 Всего: 2 |
это ошибки из-за большого количества спиртного
![]()
говорит
|
||||
|
|||||
Mayk |
|
||||
![]() ^аВаТаР^ сообщение>> ![]() ![]() ![]() ![]() Профиль Группа: Участник Сообщений: 2616 Регистрация: 22.5.2005 Где: за границей разум а Репутация: 45 Всего: 134 |
Ну и зачем? arg_ нельзя инициализировать. Он уже инициализирован в базовом классе. => надо писать arg_=arg, как и было раньше.
где говорит? -------------------- Здесь был кролик. Но его убили. Человеки < кроликов, йа считаю. |
||||
|
|||||
zss |
|
||||
![]() Опытный ![]() ![]() Профиль Группа: Участник Сообщений: 708 Регистрация: 17.6.2004 Репутация: 1 Всего: 2 |
|
||||
|
|||||
Mayk |
|
|||
![]() ^аВаТаР^ сообщение>> ![]() ![]() ![]() ![]() Профиль Группа: Участник Сообщений: 2616 Регистрация: 22.5.2005 Где: за границей разум а Репутация: 45 Всего: 134 |
Замени private наследование на public
-------------------- Здесь был кролик. Но его убили. Человеки < кроликов, йа считаю. |
|||
|
||||
zss |
|
|||
![]() Опытный ![]() ![]() Профиль Группа: Участник Сообщений: 708 Регистрация: 17.6.2004 Репутация: 1 Всего: 2 |
Mayk, спасибо - вроде собралось
![]() Еще вопрос - эти 2 конструктора придется всегда за собой таскать и для порожденных классов ? Если да - то можно ли что-нибудь придумать (чтоб не таскать - хотя есть большие подозрения, что нельзя ![]() |
|||
|
||||
![]() ![]() ![]() |
Правила форума "С++:Общие вопросы" | |
|
Добро пожаловать!
Если Вам понравилась атмосфера форума, заходите к нам чаще! С уважением, Earnest Daevaorn |
0 Пользователей читают эту тему (0 Гостей и 0 Скрытых Пользователей) | |
0 Пользователей: | |
« Предыдущая тема | C/C++: Общие вопросы | Следующая тема » |
|
По вопросам размещения рекламы пишите на vladimir(sobaka)vingrad.ru
Отказ от ответственности Powered by Invision Power Board(R) 1.3 © 2003 IPS, Inc. |