Синтаксис Объявления Указателей На Функции В C++

Когда я впервые начал использовать C++, я постоянно забывал синтаксис определения указателей на функции и особенно указателей на функции-члены.

Позже я узнал о небольшом лайфхаке, который помог мне избавиться от необходимости держать в голове синтаксис определения указателей на функции.

Правда, немного позже это все как-то устоялось в моей голове и даже стало очевидным.

На днях я показал этот лайфхак одному программисту и решил поделиться им здесь.

Чтобы избежать долгих объяснений, приведу пример:

 
 struct test
 {
     virtual int foo( const test& ) const
     {
         return 0;
     };
 
     virtual ~test()
     {}
 };
 
Допустим далее в коде нам нужно объявить указатель на test::foo. Чтобы узнать, как его следует объявить, напишем следующее:
 
 error C2440: 'initializing' : cannot convert from 'int (__thiscall test::* )(const test &) const' to 'char'
 
и попробуем скомпилировать (например, я буду использовать компилятор от Microsoft, хотя тестировал это с помощью gcc и Comeau Online Compiller).

Мы получаем следующую ошибку:

char c = &test::foo;

Из этой ошибки возьмем синтаксис объявления указателя на данный член (явное указание типа вызова __thiscall будет выброшено):

int ( test::* )(const test &) const

Теперь добавим переменную и инициализацию:

int ( test::* func )(const test &) const = &test::foo;

Готовый! Теги: #C++ #синтаксис #лайфхак #начинающим #C++

Вместе с данным постом часто просматривают: