如何解决在构造函数C ++中将类函数设置为指针
我有一个类,希望在不带参数的构造中使用默认函数,但是我希望在传递带有一个参数的函数时更改该功能。
我遇到错误“无法将类型为“ int(MyClass :: *)(int myVar)”的值分配给类型为“ MyClass :: funcptr”的实体” 但是似乎defaultFunction应该将定义与函数指针匹配。 我为此花了一段时间,但我很难理解这里的问题。 感谢您的帮助。
-MyClass.h-
class MyClass{
private:
typedef int (*funcptr)(const int myVar);
funcptr myfuncptr;
int defaultFunc(int myVar);
public:
MyClass(funcptr functionpointer);
MyClass();
void callFunction(int myVar);
};
-MyClass.cpp-
MyClass::MyClass(){
myfuncptr = defaultFunc; //a value of type "int (MyClass::*)(int myVar)" cannot be assigned to an entity of type "MyClass::funcptr"
};
MyClass::MyClass(funcptr functionpointer){
myfuncptr = functionpointer;
};
void MyClass::callFunction(int myVar){
int i = (*myfuncptr)(myVar);
};
int MyClass::defaultFunc(int myVar){
return myVar + 3;
};
解决方法
将其更改为
typedef std::function<int(int)> funcptr;
({tw using
比typedef
更为惯用)和
myfuncptr = [this](int x){ return defaultFunc(x); };
,
我尝试了函数指针typedef和使用的每种组合,但最终我认为lambda是有效的。谢谢大家的帮助。
-MyClass.h-
class MyClass{
private:
std::function<int(int)> func;
int defaultFunc(int myVar);
public:
MyClass(std::function<bool(int)> func);
MyClass();
void callFunction(int myVar);
};
-MyClass.cpp-
MyClass::MyClass(){
this->func = [=] (int a) {return defaultFunc(a);};
};
MyClass::MyClass(std::function<int(int)> func;){
this->func = func;
};
void MyClass::callFunction(int myVar){
int i = func(myVar);
};
int MyClass::defaultFunc(int myVar){
return myVar + 3;
};
版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 dio@foxmail.com 举报,一经查实,本站将立刻删除。