Преобразование указателей в С++
#2
Отправлено 28.04.2008, 22:02:13
Как преобразовать указатель на функцию в указатель на void и обратно.
#include <iostream> typedef int (*function_ptr)(int x); int sqr(int x) { return x * x; } int execute_function(void* function, int x) { function_ptr f = reinterpret_cast<function_ptr>(function); return f(x); } int main() { void* function = reinterpret_cast<void*>(&sqr); std::cout << execute_function(function, 3) << std::endl; return 0; }
Это пример с указателем на функцию. Если требуется указатель на функцию-член класса, то её невозможно в общем случае преобразовать в void*.
#3
Отправлено 06.05.2008, 20:19:41
Жаль мне как раз именно это и надо было.
Как преобразовать указатель на функцию в указатель на void и обратно.#include <iostream> typedef int (*function_ptr)(int x); int sqr(int x) { return x * x; } int execute_function(void* function, int x) { function_ptr f = reinterpret_cast<function_ptr>(function); return f(x); } int main() { void* function = reinterpret_cast<void*>(&sqr); std::cout << execute_function(function, 3) << std::endl; return 0; }
Это пример с указателем на функцию. Если требуется указатель на функцию-член класса, то её невозможно в общем случае преобразовать в void*.
#6
Отправлено 19.05.2008, 20:47:47
Мне это понадобилось, когда я делал свою библиотеку для сигнал-слотов. Сколько я тогда интересного про указатели на функции-члены узнал! Тоже к void* пытался сначала кастовать. Я тогда даже m4 заюзал для генерации С++ кода из за отсутствия variadic templatesА зачем? Есть же абстрактные классы... Можно и интерфейс замутить. От него рожаешь интересующие тебя классы, и передаешь указатели на эти объекты.
Еще есть объекты-функции. Короче, вариантов есть
PS про миллион и одну библиотеку знаю и знал. Интересно было просто.
Думаю, у вас пиратская копия. Он стоит довольно дорого. Попросите продавца вернуть деньги и попробуйте найти более дешёвые или бесплатные программы-аналоги.Ребята, извините. Не по теме, просто не знаю куда сунуться. Купила Corel Draw в небольшом магзике. Пытаюсь установить, говорит, что неверный серийный номер. Помогите, пожалуйста! Срочно!
Сообщение отредактировал v04bvs: 19.05.2008, 20:45:45
Количество пользователей, читающих эту тему: 1
пользователей: 0, неизвестных прохожих: 1, скрытых пользователей: 0