C++ 将类函数设置为构造函数C++;
我有一个类,我想在构造时不带参数指向一个默认函数,但我想在传递一个带有其中一个参数的函数时更改该函数 我收到一个错误,无法将“类型为”int(MyClass::*)(int myVar)“的值分配给类型为“MyClass::funcptr”的实体 但似乎defaultFunction应该将定义与函数指针相匹配。 我为此奋斗了一段时间,我很难理解这里的问题是什么。 感谢您的帮助 --MyClass.h-- --MyClass.cpp-- 换成C++ 将类函数设置为构造函数C++;,c++,function,pointers,constructor,C++,Function,Pointers,Constructor,我有一个类,我想在构造时不带参数指向一个默认函数,但我想在传递一个带有其中一个参数的函数时更改该函数 我收到一个错误,无法将“类型为”int(MyClass::*)(int myVar)“的值分配给类型为“MyClass::funcptr”的实体 但似乎defaultFunction应该将定义与函数指针相匹配。 我为此奋斗了一段时间,我很难理解这里的问题是什么。 感谢您的帮助 --MyClass.h-- --MyClass.cpp-- 换成 typedef std::function funcp
typedef std::function funcptr;
(顺便说一句,现在使用比使用typedef更惯用)以及
myfuncptr=[this](intx){returndefaultfunc(x);};
我尝试了函数指针typedefs和using的每一种组合,但最终我认为lambda是有效的。谢谢大家的帮助
--MyClass.h--
class-MyClass{
私人:
std::函数func;
int defaultFunc(int myVar);
公众:
MyClass(std::function func);
MyClass();
无效调用函数(int-myVar);
};
--MyClass.cpp--
MyClass::MyClass(){
this->func=[=](int a){return defaultFunc(a);};
};
MyClass::MyClass(std::function func;){
此->func=func;
};
void MyClass::callFunction(int myVar){
int i=func(myVar);
};
int-MyClass::defaultFunc(int-myVar){
返回myVar+3;
};
funcptr
是指向函数的指针&MyClass::defaultFunc
(不是原始的defaultFunc
,这是一个错误,Microsoft的非一致性编译器除外)是指向成员函数的指针。他们不一样。
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::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;
};
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::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;
};