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为 type Functor,或者您可能正在寻找的是std::function

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

于 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 回答