Перейти к содержимому

Фотография

Преобразование указателей в С++


  • Авторизуйтесь для ответа в теме
Сообщений в теме: 5

#1
Takeda

Takeda
  • Гость
  • 20 сообщений
Как преобразовать указатель на функцию в указатель на void и обратно.
  • 0

#2
v04bvs

v04bvs
  • В доску свой
  • 2 062 сообщений

Как преобразовать указатель на функцию в указатель на 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*.
  • 0

#3
Takeda

Takeda
  • Гость
  • 20 сообщений


Как преобразовать указатель на функцию в указатель на 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*.

Жаль мне как раз именно это и надо было.
  • 0

#4
dzid

dzid
  • Свой человек
  • 939 сообщений
А зачем? Есть же абстрактные классы... Можно и интерфейс замутить. От него рожаешь интересующие тебя классы, и передаешь указатели на эти объекты.

Еще есть объекты-функции. Короче, вариантов есть :D
  • 0

#5
Галка

Галка
  • Случайный прохожий
  • 2 сообщений
Ребята, извините. Не по теме, просто не знаю куда сунуться. Купила Corel Draw в небольшом магзике. Пытаюсь установить, говорит, что неверный серийный номер. Помогите, пожалуйста! Срочно! :D
  • 0

#6
v04bvs

v04bvs
  • В доску свой
  • 2 062 сообщений

А зачем? Есть же абстрактные классы... Можно и интерфейс замутить. От него рожаешь интересующие тебя классы, и передаешь указатели на эти объекты.

Еще есть объекты-функции. Короче, вариантов есть :lol:

Мне это понадобилось, когда я делал свою библиотеку для сигнал-слотов. Сколько я тогда интересного про указатели на функции-члены узнал! Тоже к void* пытался сначала кастовать. Я тогда даже m4 заюзал для генерации С++ кода из за отсутствия variadic templates :smoke:

PS про миллион и одну библиотеку знаю и знал. Интересно было просто.

Ребята, извините. Не по теме, просто не знаю куда сунуться. Купила Corel Draw в небольшом магзике. Пытаюсь установить, говорит, что неверный серийный номер. Помогите, пожалуйста! Срочно! :dandy:

Думаю, у вас пиратская копия. Он стоит довольно дорого. Попросите продавца вернуть деньги и попробуйте найти более дешёвые или бесплатные программы-аналоги.

Сообщение отредактировал v04bvs: 19.05.2008, 20:45:45

  • 0


Количество пользователей, читающих эту тему: 1

пользователей: 0, неизвестных прохожих: 1, скрытых пользователей: 0

Размещение рекламы на сайте     Предложения о сотрудничестве     Служба поддержки пользователей

© 2011-2022 vse.kz. При любом использовании материалов Форума ссылка на vse.kz обязательна.