微信公众号搜"智元新知"关注
微信扫一扫可直接关注哦!

在构造函数C ++中将类函数设置为指针

如何解决在构造函数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 usingtypedef更为惯用)和

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 举报,一经查实,本站将立刻删除。