如何为 class 级 typedef 函数创建定义
How to create definition for class level typedef function
可能是一个幼稚的c++
问题,
我在库中有一个 class,它有一个函数的 public 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
执行此操作的正确方法是什么?
简单地说,您的函数不遵守提供的合同(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;
}
可能是一个幼稚的c++
问题,
我在库中有一个 class,它有一个函数的 public 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
执行此操作的正确方法是什么?
简单地说,您的函数不遵守提供的合同(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;
}