Форум программистов, компьютерный форум, киберфорум
С++ для начинающих
Войти
Регистрация
Восстановить пароль
Другие темы раздела
C++ Как это перевести в нормальное выражение? https://www.cyberforum.ru/ cpp-beginners/ thread1291246.html
x /= x & -x; Я так понял то что "/=" это значит поделить. "-x" это минус, но только от чего???
C++ рекурсия не знаю как назвать сложения сумма функция C++
нужна рекурсивная функция которая решает введенную функцию в char, например пользователь ввел 5+6(8+2+4) , заметте перед скобкой ( он не ввел умножение * ,, в массиве он хранится как {'5',...
Не могу записать прочитать пробелы C++
Доброго времени суток!) Только начал С++... Пишу программу, столкнулся с проблемой при чтении из файла.. А именно при чтении не считываются пробелы, ка можно это исправить? Вот код.. using...
C++ Преобразование типов и методы класов Есть задача: 1)Создать класс Triangle, разработав следующие элементы класса: поля: int a, b, c; 2)Конструктор, позволяющий создать экземпляр класса с заданными длинами сторон 3)Методы,... https://www.cyberforum.ru/ cpp-beginners/ thread1291209.html
C++ Вставить число К1 после всех элементов, больших заданного числа, а число К2 – перед всеми элементами, кратными https://www.cyberforum.ru/ cpp-beginners/ thread1291206.html
Вставить число К1 после всех элементов, больших заданного числа, а число К2 – перед всеми элементами, кратными трем. void exercise_3_2() { int i; int size_of_array=10; int...
C++ Заполнение массива
Добрый день. Объясните,пожалуйста, следующий момент. Есть кусок кода: void fill(struct member *p){ printf("\nFill your name please: "); gets((*p).firstname); cout<<"\nEnter u'r...
Составить программу вычисления значения функции C++
Привет. Помоги пожалуйста составить программу вычисления значения функции f(x,y) для заданных значений a, b, c и произвольного x с автоматическим выбором необходимой формулы: f(x, y)=\begin{cases}...
C++ Описать класс для вычисления суммы Помогите пожалуйста написать программу. Описать класс, используя различные варианты доступа к данным (для реализации выбрать самостоятельно любые три варианты): все исходные данные закрыты;... https://www.cyberforum.ru/ cpp-beginners/ thread1291182.html
C++ Не работает randomize в Dev C++ https://www.cyberforum.ru/ cpp-beginners/ thread1291144.html
https://www.cyberforum.ru/attachment.php?attachmentid=450146&stc=1&d=1415027894
C++ Обработка отдельных строк (столбцов) матрицы и работа с диагоналями. Двумерные массивы Ввести целочисленный двумерный массив ANxM, вывести его. Найти сумму положительных угловых элементов. Найденной суммой заменить строку содержащую минимальный элемент и столбец, содержащий... https://www.cyberforum.ru/ cpp-beginners/ thread1291137.html
С чаем беда...
Эксперт CЭксперт С++
8502 / 4224 / 1169
Регистрация: 18.10.2014
Сообщений: 9,158
03.11.2014, 20:48 0

Функция, получающая указатель на обычную функцию, получает указатель на метод класса

03.11.2014, 20:48. Просмотров 1728. Ответов 4
Метки (Все метки)

Лучший ответ Сообщение было отмечено porshe как решение

Решение


Цитата Сообщение от porshe Посмотреть сообщение
я вообще если честно не понимаю, почем программа не "падает"
Ваша код бессмысленен. Указатель на обычную функцию и указатель на метод класса - это объекты совершенно разной природы. В вашу функцию 'start' невозможно передать указатель на метод класса. А то, что вы его туда силой "вбили" через 'reinterpret_cast' приводит только к неопределенному поведению. Заниматься каким-то анализом этого кода на тему "чего и почему" - пустая трата времени.

Я не знаю, в чем состоит задача, но если вам нужно "свести вместе" указатели на обычные функции и указатели на методы классов, то сделать это на уровне языкового ядра (core C++ language) не получится. Надо переходить к функциональным объектам и либо делать вашу функцию шаблонной, либо работать через std::function.

Добавлено через 11 минут
К примеру

C++
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
#include <functional>
#include <iostream>
 
void start(const std::function<void ()>& f)
{
  f();
}
 
class C
{
public:
  C() : i(0) {}
  void myfunc()
  {
    std::cout << "C::myfunc()" << std::endl;
    i++;
  }
  int i;
};
 
int main()
{
  C obj;
  std::cout << obj.i << std::endl;
  std::function<void()> f = std::bind(&C::myfunc, &obj);
  start(f);
  std::cout << obj.i << std::endl;
}


Вернуться к обсуждению:
Функция, получающая указатель на обычную функцию, получает указатель на метод класса
1
Programming
Эксперт
94731 / 64177 / 26122
Регистрация: 12.04.2006
Сообщений: 116,782
03.11.2014, 20:48
Готовые ответы и решения:

В функцию-метод передать указатель на другую функцию-метод и вызвать через переданный указатель
Друзья! Всем привет. Вот код: class otets { public: void f (void (otets::*p)()); ...

Функция, получающая подстроку, возвращает испорченный указатель на строку
Пытаюсь выделить подстроку в Microsoft Visual C++ 2013, чтобы убрать путь к файлу и оставить только...

Как передать указатель на функцию через метод класса ?
typedef void (*FuncCallback)(float* flValue); Пробовал по всякому и ни как: Class.CallFunc...

Как сделать функцию, возвращающую указатель на функцию (которая в свою очередь возвращает указатель на массив)
Изучаю c++ по одной книжке.Она говорить не умеет.. Так вот понадобилось написать функцию,которая...

4
КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin® Version 3.8.9
Copyright ©2000 - 2021, vBulletin Solutions, Inc.