0

関数ポインターをメンバーとして持つクラスがあります。場合によっては、そのポインターが関数オブジェクトを指すようにしたいのですが、それは不可能ですか?

class C {
public:
    C();
private:
    void (*p)();
    struct Functor {
        void operator()() {
        }
    };
};

C::C() : p(Functor()) {
}

int main(int argc, char **argv) {
    C c;
}

私は得る:

t.cpp: In constructor 'C::C()':
Line 12: error: cannot convert 'C::Functor' to 'void (*)()' in initialization
4

2 に答える 2

4

いいえ、できません。の型は型にFunctor近くさえありませんvoid(*)()。メンバーpをタイプに変更するかFunctor、探しているものを次のように変更できますstd::function

std::function汎用の多相関数ラッパーです。std::function のインスタンスは、任意の呼び出し可能なターゲット (関数、ラムダ式、バインド式、またはその他の関数オブジェクト) を格納、コピー、および呼び出すことができます。

于 2011-12-24T03:25:05.163 に答える
1

いいえ、Functor オブジェクトは関数ポインターではありません。p を Functor として初期化する場合は、次のように宣言する必要があります。

class C {
public:
    C();
private:
    struct Functor {
        void operator()() {
        }
    } p;
};
于 2011-12-24T03:27:10.803 に答える