成员函数指向函数对象的指针

时间:2011-12-24 03:22:40

标签: c++ functor member-function-pointers

我有一个带有函数指针的类作为成员。在某种情况下,我希望指针指向一个函数对象,这是不可能的吗?

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

2 个答案:

答案 0 :(得分:4)

不,这是不可能的。 Functor的类型甚至不接近void(*)()类型。您可以将成员p更改为Functor类型,或者您可能要查找的内容为std::function

  

std::function是一个通用的多态函数包装器。 std :: function的实例可以存储,复制和调用任何可调用的目标 - 函数,lambda表达式,绑定表达式或其他函数对象。

答案 1 :(得分:1)

不,Functor对象不是函数指针。如果您想将p初始化为Functor,则应将其声明为:

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