Форум программистов, компьютерный форум CyberForum.ru

С++ для начинающих

Войти
Регистрация
Восстановить пароль
 
BESSON_off
 Аватар для BESSON_off
3 / 0 / 1
Регистрация: 08.07.2013
Сообщений: 338
#1

Указатель на функцию-член - C++

18.09.2013, 15:40. Просмотров 456. Ответов 5
Метки нет (Все метки)

Имеем следующий код:
C++
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
#include <iostream>
using namespace std;
 
class Windows
{
public:
    void OpenWindows() { cout << "Open Windows";}
    void CloseWindows() {cout << "Close Windows";}
};
 
int main()
{
void (Windows::*ptr)() = &Windows::CloseWindows;
Windows w1;
(w1.(*ptr))();
return 0;
}
Вопрос заключается в том, почему строка 15 ((w1.(*ptr))();) является неработоспособной? (правильность, написанная в книжке, гласит, что писать нужно "(w1.*ptr)()", но я не могу понять почему не работает мой вариант.
Если мы разложим эту строчку на приоритеты С++ (см. картинку), то из очередности понятно, что в моем случае 1.1 вызывается первой, далее 1.2, которая вызывает 1.3, то есть объект так и так вызывает разименованное значение, находящееся в указателе, в нашем случае функцию. Но видимо я где-то что-то не понимаю...
Миниатюры
Указатель на функцию-член  
Similar
Эксперт
41792 / 34177 / 6122
Регистрация: 12.04.2006
Сообщений: 57,940
18.09.2013, 15:40     Указатель на функцию-член
Посмотрите здесь:

Указатель на функцию член C++
Указатель на функцию - член класса. C++
C++ указатель на член в массиве
C++ В функцию-метод передать указатель на другую функцию-метод и вызвать через переданный указатель
Указатель на функцию-член C++
C++ Указатель на функцию-член
C++ std::bind и указатель на статическую функцию член класса
указатель на функцию-член! C++
Как создать указатель на функцию-член класса и вызвать его? C++
C++ Как сделать функцию, возвращающую указатель на функцию (которая в свою очередь возвращает указатель на массив)
Указатель на функцию-член класса C++
Указатель на фунцкию-член C++

Искать еще темы с ответами

Или воспользуйтесь поиском по форуму:
После регистрации реклама в сообщениях будет скрыта и будут доступны все возможности форума.
Croessmah
Модератор
Эксперт CЭксперт С++
 Аватар для Croessmah
12536 / 7098 / 797
Регистрация: 27.09.2012
Сообщений: 17,518
Записей в блоге: 2
Завершенные тесты: 1
18.09.2013, 15:47     Указатель на функцию-член #2
C++
1
(w1.*ptr)();
Добавлено через 1 минуту
Цитата Сообщение от BESSON_off Посмотреть сообщение
Если мы разложим эту строчку на приоритеты С++ (см. картинку), то из очередности понятно, что в моем случае 1.1 вызывается первой
А с чего это должно работать?
Оператору "." нужно имя члена при компиляции, а не разыменованный в рантайме указатель

Добавлено через 2 минуты
Цитата Сообщение от BESSON_off Посмотреть сообщение
Но видимо я где-то что-то не понимаю...
Наверное то, что ".*" - это оператор, а не оператор "." + Разыменование
BESSON_off
 Аватар для BESSON_off
3 / 0 / 1
Регистрация: 08.07.2013
Сообщений: 338
18.09.2013, 15:55  [ТС]     Указатель на функцию-член #3
Цитата Сообщение от Croessmah Посмотреть сообщение
Наверное то, что ".*" - это оператор, а не оператор "." + Разыменование
И как раньше люди без форумов разбирались в подобном...
Согласен с тем, что это я из виду упустил, но почему данный оператор ".*" нигде не афишируют? Они везде представлены как одиночные... Спасибо вам огромное!

Добавлено через 2 минуты
Цитата Сообщение от Croessmah Посмотреть сообщение
Оператору "." нужно имя члена при компиляции, а не разыменованный в рантайме указатель
А то, что выдается при разименовании - это разве не функция-член (пусть и через посредника)?
ForEveR
Модератор
Эксперт С++
 Аватар для ForEveR
7958 / 4720 / 319
Регистрация: 24.06.2010
Сообщений: 10,525
Завершенные тесты: 3
18.09.2013, 15:59     Указатель на функцию-член #4
Цитата Сообщение от BESSON_off Посмотреть сообщение
Согласен с тем, что это я из виду упустил, но почему данный оператор ".*" нигде не афишируют? Они везде представлены как одиночные...
Смотря какие ресурсы посещать (хотя пожалуй во всех книгах упоминаются операторы .*, ->*).
Croessmah
Модератор
Эксперт CЭксперт С++
 Аватар для Croessmah
12536 / 7098 / 797
Регистрация: 27.09.2012
Сообщений: 17,518
Записей в блоге: 2
Завершенные тесты: 1
18.09.2013, 16:00     Указатель на функцию-член #5
Цитата Сообщение от BESSON_off Посмотреть сообщение
Согласен с тем, что это я из виду упустил, но почему данный оператор ".*" нигде не афишируют?
Кто такое сказал? Может просто Вы с этим не сталкивались. Если что, то вот из стандарта:
Указатель на функцию-член
BESSON_off
 Аватар для BESSON_off
3 / 0 / 1
Регистрация: 08.07.2013
Сообщений: 338
18.09.2013, 16:05  [ТС]     Указатель на функцию-член #6
Цитата Сообщение от ForEveR Посмотреть сообщение
Смотря какие ресурсы посещать
Вот это правильно...
Yandex
Объявления
18.09.2013, 16:05     Указатель на функцию-член
Ответ Создать тему
Опции темы

Текущее время: 23:26. Часовой пояс GMT +3.
КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin® Version 3.8.9
Copyright ©2000 - 2017, vBulletin Solutions, Inc.
Рейтинг@Mail.ru