如何为类级别typedef函数创建定义

时间:2015-07-09 06:09:08

标签: c++ function-pointers

可能是一个天真的c++问题,

我在一个库中有一个类,它有一个函数的公共typedef,它也是它的构造函数的参数。我希望能够通过为此typedef创建一个定义来调用此构造函数。

为了简化理解,我在下面创建了示例代码,

namespace example {
    class MyClass {

    public: 
        typedef int(*MyFunc)(char c, int x);
        MyClass(MyFunc myFunc) {

        }

        MyClass() {

        }
    };
}


static bool MyFuncDefinition(char c, int x) {
    return 0;
}


int client() {
    example::MyClass *myClassObject = new example::MyClass(MyFuncDefinition);
    return 0;
}

会抛出编译错误,

Error   1   error C2664: 'example::MyClass::MyClass(const example::MyClass &)' : cannot convert argument 1 from 'bool (__cdecl *)(char,int)' to 'example::MyClass::MyFunc'  d:\anoopelias\wspace\ppc3\experiments\test\typedefexample.cpp   24  1   TypeDefTest

这样做的正确方法是什么?

1 个答案:

答案 0 :(得分:1)

简单地说,你的功能不尊重提供的合同(bool不是int)。

尝试如下:

namespace example {
    class MyClass {

    public: 
        typedef int(*MyFunc)(char c, int x);
        MyClass(MyFunc myFunc) {
        }

        MyClass() {
        }
    };
}


static int MyFuncDefinition(char c, int x) {
    return 0;
}


int main() {
    example::MyClass *myClassObject = new example::MyClass(MyFuncDefinition);
    return 0;
}