![]() |
Модераторы: Daevaorn |
![]() ![]() ![]() |
|
TDM |
|
||||
![]() Шустрый ![]() Профиль Группа: Участник Сообщений: 133 Регистрация: 1.2.2006 Где: SPB Репутация: нет Всего: нет |
Как узнать сколько у функции параметров и какого они типа если передавать только указатель на неё?
Вот например код:
В MakeFunction должно определятся сколько в foo параметров и какого типа они. Есть вариант сделать кучу предопределённых типов и перегрузить MakeFunction много раз, типа:
но это не катит, по видимому надо с шаблонами как то мутить. не подскажете? |
||||
|
|||||
Cheloveck |
|
|||
![]() Эксперт ![]() ![]() ![]() Профиль Группа: Завсегдатай Сообщений: 1578 Регистрация: 26.7.2008 Где: Тула Репутация: 3 Всего: 32 |
никак по видимому, да конкретнее, что надо сделать? -------------------- ![]() |
|||
|
||||
TDM |
|
|||
![]() Шустрый ![]() Профиль Группа: Участник Сообщений: 133 Регистрация: 1.2.2006 Где: SPB Репутация: нет Всего: нет |
создрать различные реализации MakeFunction(Func f) в зависимости от переданной функции (от колва пар-ов и их типов) но не перегружать её стотыщ раз Добавлено через 10 минут и 47 секунд всё, решил проблему Это сообщение отредактировал(а) TDM - 4.9.2010, 18:48 |
|||
|
||||
boostcoder |
|
|||
![]() pattern`щик ![]() ![]() ![]() ![]() Профиль Группа: Завсегдатай Сообщений: 5458 Регистрация: 1.4.2010 Репутация: 49 Всего: 110 |
как? Добавлено через 7 минут и 56 секунд ложь. легко. легко. |
|||
|
||||
Cheloveck |
|
|||
![]() Эксперт ![]() ![]() ![]() Профиль Группа: Завсегдатай Сообщений: 1578 Регистрация: 26.7.2008 Где: Тула Репутация: 3 Всего: 32 |
ну, а где демонстрация? Только давай так, мы имеем указатель на void, ибо типизированные указатели статические и всё заранее известно))
Заставь это работать. Это сообщение отредактировал(а) Cheloveck - 4.9.2010, 21:24 -------------------- ![]() |
|||
|
||||
TDM |
|
|||
![]() Шустрый ![]() Профиль Группа: Участник Сообщений: 133 Регистрация: 1.2.2006 Где: SPB Репутация: нет Всего: нет |
||||
|
||||
azesmcar |
|
|||
![]() uploading... ![]() ![]() ![]() ![]() Профиль Группа: Участник Клуба Сообщений: 6291 Регистрация: 12.11.2004 Где: Армения Репутация: 81 Всего: 211 |
В void* указатели на функцию не передаются. Точнее может где-то и передаются, но так нельзя. полагаю имелось ввиду на этапе компиляции, что-то вроде этого
Добавлено через 4 минуты и 13 секунд это и к твоему коду относиться ![]() |
|||
|
||||
TDM |
|
|||
![]() Шустрый ![]() Профиль Группа: Участник Сообщений: 133 Регистрация: 1.2.2006 Где: SPB Репутация: нет Всего: нет |
проверил, в vs передаётся и успешно запускается, в gcc тоже. ![]() Это сообщение отредактировал(а) TDM - 4.9.2010, 23:08 |
|||
|
||||
Cheloveck |
|
|||
![]() Эксперт ![]() ![]() ![]() Профиль Группа: Завсегдатай Сообщений: 1578 Регистрация: 26.7.2008 Где: Тула Репутация: 3 Всего: 32 |
а мне показалось на этапе выполнения... -------------------- ![]() |
|||
|
||||
azesmcar |
|
|||
![]() uploading... ![]() ![]() ![]() ![]() Профиль Группа: Участник Клуба Сообщений: 6291 Регистрация: 12.11.2004 Где: Армения Репутация: 81 Всего: 211 |
ну..из этапа компиляции информацию можно легко передать в этап выполнения ![]() это ни о чем не говорит, сегодня передается - завтра может перестать. void* имеет достаточный размер, чтобы хранить указатель на любой объект, объект а не функцию. |
|||
|
||||
boostcoder |
|
||||||||
![]() pattern`щик ![]() ![]() ![]() ![]() Профиль Группа: Завсегдатай Сообщений: 5458 Регистрация: 1.4.2010 Репутация: 49 Всего: 110 |
так узнаешь кол-во аргументов:
так можешь получить mpl последовательность типов, и произвести с ними какие-то действия(добавить тип, удалить, изменить):
вот только тип по индексу 0 - возвращаемый тип. а дальше аргументы. так, из mpl последовательности, можешь собрать декларацию обратно:
вопросы? - нет вопросов. недавай. создай отдельную тему, тогда и пообщаемся ![]() ![]() ![]()
![]() Это сообщение отредактировал(а) boostcoder - 5.9.2010, 05:55 |
||||||||
|
|||||||||
TDM |
|
|||
![]() Шустрый ![]() Профиль Группа: Участник Сообщений: 133 Регистрация: 1.2.2006 Где: SPB Репутация: нет Всего: нет |
boostcoder
спасибо, boost хорошая штука по всей видимости) |
|||
|
||||
boostcoder |
|
|||
![]() pattern`щик ![]() ![]() ![]() ![]() Профиль Группа: Завсегдатай Сообщений: 5458 Регистрация: 1.4.2010 Репутация: 49 Всего: 110 |
||||
|
||||
TDM |
|
|||
![]() Шустрый ![]() Профиль Группа: Участник Сообщений: 133 Регистрация: 1.2.2006 Где: SPB Репутация: нет Всего: нет |
||||
|
||||
djamshud |
|
|||
![]() Пердупержденный ![]() ![]() ![]() Профиль Группа: Завсегдатай Сообщений: 1655 Регистрация: 23.11.2009 Репутация: 8 Всего: 39 |
-------------------- 'Cuz I never walk away from what I know is right Alice Cooper - Freedom |
|||
|
||||
![]() ![]() ![]() |
Правила форума "С++:Общие вопросы" | |
|
Добро пожаловать!
Если Вам понравилась атмосфера форума, заходите к нам чаще! С уважением, Earnest Daevaorn |
1 Пользователей читают эту тему (1 Гостей и 0 Скрытых Пользователей) | |
0 Пользователей: | |
« Предыдущая тема | C/C++: Общие вопросы | Следующая тема » |
|
По вопросам размещения рекламы пишите на vladimir(sobaka)vingrad.ru
Отказ от ответственности Powered by Invision Power Board(R) 1.3 © 2003 IPS, Inc. |