C ++で関数ポインターを宣言するための構文

C ++を使い始めたばかりの頃、関数ポインター、特にメンバー関数ポインターを定義するための構文を忘れていました。

後で、関数へのポインターを定義するための構文を頭の中に保持するというアイデアを取り除くのに役立つ小さなライフハックについて学びました。 確かに、少し後にこの全体が何らかの形で私の頭に落ち着き、それが明らかになりました。

先日、このライフハックを一人のプログラマーに見せて、ここで共有することにしました。

長い説明を避けるために、例を挙げます。
構造テスト
 {
    仮想int foo(定数テスト&)const
     {
         0を返します。
     };

    仮想〜テスト()
     {}
 };

さらにコードで、test :: fooへのポインターを宣言する必要があるとします。
宣言の方法を見つけるために、次のように記述します。
char c = &test::foo;

コンパイルを試みます(たとえば、gccとComeau Online Compillerでチェックしましたが、Microsoftのコンパイラを使用します)。

次のエラーが表示されます。
エラーC2440:「初期化」:「int(__thiscall test :: *)(const test&)const」から「char」に変換できません


このエラーから、このメンバーへのポインターを宣言するための構文を使用します(__thiscall呼び出しのタイプの明示的な表示-スローします)。
int ( test::* )(const test &) const

次に、変数と初期化を追加します。
int ( test::* func )(const test &) const = &test::foo;

できた!

Source: https://habr.com/ru/post/J90604/


All Articles