C ++函数指针(类成员)到模板类的非静态成员函数

时间:2013-11-18 06:41:20

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

我有一些问题,想知道是否有可能实现在类本身内使用的非静态成员函数的函数指针。我有一个简化的代码,如下所示,当调用Start函数时,函数“func1”是一个静态成员函数,工作正常:

Template<class F> 
class MyClass
{
    public: 
        typedef void (*FuncPtrType)(float*);

        void Start()
        {
            this->Run(Func1);
        }

    protected:
        static void Func1(float arg[]){ // some code }

        void Run(FuncPtrType func){ // some code }
}

所以我的问题是否甚至可以使“func1”非静态?如果是这样,我需要做什么才能使其编译。我尝试了以下代码:

Template<class F> 
class MyClass
{
    public: 
        typedef void (*FuncPtrType)(float*);

        void Start()
        {
            this->Run(&MyClass<F>::Func1);
        }

    protected:
        void Func1(float arg[]){ // some code }

        void Run(FuncPtrType func){ // some code }
}

它在编译中给我带来了错误:错误c2664:...无法从'void(MyClass :: *)(float *)'转换为'void(__ cdecl *)(float *)'

1 个答案:

答案 0 :(得分:2)

您只需更改typedef

typedef void (MyClass::*FuncPtrType)(float*);

您的代码不起作用,因为指向函数的指针!=指向成员函数的指针。