1

重複の可能性:
C++ メンバー関数ポインター
クラス データ メンバーの場合、メンバー関数へのポインターを呼び出す方法は?

私は最近 C++ を使い始めたばかりなので、以下に些細な間違いが含まれていたり、簡単な解決策を見逃していたり​​した場合は、お詫び申し上げます。私はこのようなことを達成したいと思います:

class ClassA {

typedef double (ClassA::*CondFunc)();
 public:
    ClassA(int x, int y) {

        value_ = x;

        switch (y) {
            case 0:
                condFunc_ = &ClassA::condA;
                break;
            case 1:
                condFunc_ = &ClassA::condB;
            default:
                break;
        }
    }

    ~ClassA();

    int value_;
    CondFunc condFunc_;
    double condA() { return 2.0*value_; }
    double condB() { return 4.0*value_; }

    void Test() {
        int a = condFunc_(); // compile error
    } 
};

しかし、Test() でコンパイル エラーが発生します。これは非常に単純化された関数であり、意味をなさないことに注意してください。このフォーラムや他の場所で回答を検索しましたが、そのような非静的メンバー関数ポインターの定義/呼び出しが可能かどうかはまだわかりません。私が遭遇した唯一のもっともらしいヒント/解決策は、静的ラッパー関数を使用して同様のことを達成することです。ヘルプ/説明に感謝します。

4

1 に答える 1

4

次のようにメンバーポインタ関数を呼び出す必要があります。

    int a = (this->*condFunc_)(); 
于 2012-03-12T04:17:46.260 に答える