Когда я впервые начал использовать 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++
-
8 Советов Тем, Кто Ищет Работу
19 Oct, 24 -
Игры С Презентации Sony Playstation 5
19 Oct, 24 -
Хлыст. Том 4А
19 Oct, 24 -
Wired Uk С Индивидуальными Обложками
19 Oct, 24 -
Особенности Национальной Поддержки
19 Oct, 24 -
Канделябры Против Леденца
19 Oct, 24 -
У Рунета Новый Лидер
19 Oct, 24