55 / 49 / 42
Регистрация: 18.07.2014
Сообщений: 194
|
||||||
1 | ||||||
Функция, получающая указатель на обычную функцию, получает указатель на метод класса03.11.2014, 20:07. Просмотров 1699. Ответов 4
Метки нет Все метки)
(
Здравтсвуйте.
Имеется вопрос по указателям на методы класса. Допустим, есть функция( f ), которая принимает указатель на функцию и запускает функцию через этот указатель. Есть класс, у которого есть метод. Этот метод я буду передовать в f. Этот метод должен изменять содержимое объекта, но так как f принимает указатель на обычную функцию, то, естественно, ничего не меняется( я вообще если честно не понимаю, почем программа не "падает" ведь метод должен менять значение члена объекта, но указатель this не передан, то есть метод, вызван как статический, хотя он ни капельки не статический ). Думаю, что я выразился косоязычно, поэтому привожу пример:
Код
/home/roma/Desktop/GameOfLife/GameOfLife/main.cpp:26: warning: converting from 'void (C::*)()' to 'void (*)()' [-Wpmf-conversions] start( reinterpret_cast<void(*)()>(func) ); ^ ![]()
0
|
|
03.11.2014, 20:07 | |
В функцию-метод передать указатель на другую функцию-метод и вызвать через переданный указатель Функция, получающая подстроку, возвращает испорченный указатель на строку Как передать указатель на функцию через метод класса ?
|
|
03.11.2014, 20:21 | 2 | |||||
Кликните здесь для просмотра всего текста
1
|
С чаем беда...
![]() ![]() 8269 / 4045 / 1111
Регистрация: 18.10.2014
Сообщений: 8,733
|
||||||
03.11.2014, 20:48 | 3 | |||||
![]() Решение
Ваша код бессмысленен. Указатель на обычную функцию и указатель на метод класса - это объекты совершенно разной природы. В вашу функцию 'start' невозможно передать указатель на метод класса. А то, что вы его туда силой "вбили" через 'reinterpret_cast' приводит только к неопределенному поведению. Заниматься каким-то анализом этого кода на тему "чего и почему" - пустая трата времени.
Я не знаю, в чем состоит задача, но если вам нужно "свести вместе" указатели на обычные функции и указатели на методы классов, то сделать это на уровне языкового ядра (core C++ language) не получится. Надо переходить к функциональным объектам и либо делать вашу функцию шаблонной, либо работать через std::function. Добавлено через 11 минут К примеру
1
|
55 / 49 / 42
Регистрация: 18.07.2014
Сообщений: 194
|
|
03.11.2014, 20:53 [ТС] | 4 |
Большое спасибо
![]()
0
|
03.11.2014, 21:01 | 5 | ||||||||||
Я б через шаблон все же делал:
1
|
03.11.2014, 21:01 | |
Заказываю контрольные, курсовые, дипломные и любые другие студенческие работы здесь. Как передать в метод класса Menu указатель на метод дочернего класса?
Функция принимает указатель на void и возвращает указатель на int Деревья С++ (функция, которая получает указатель на корень дерева и возвращает длину самой длинной ветки на дереве) Искать еще темы с ответами Или воспользуйтесь поиском по форуму: |