मेरे पास एक वर्ग है जिसे मैं पैरामीटर के बिना निर्माण करते समय इंगित करने के लिए एक डिफ़ॉल्ट फ़ंक्शन रखना चाहता हूं, लेकिन मैं चाहता हूं कि पैरामीटर में से किसी एक के साथ फ़ंक्शन पास होने पर कार्यक्षमता बदल जाए।

मुझे त्रुटि मिल रही है "प्रकार का एक मान" int (MyClass :: *) (int myVar)" को "MyClass :: funcptr" प्रकार की इकाई को असाइन नहीं किया जा सकता है, लेकिन ऐसा लगता है कि डिफ़ॉल्ट फ़ंक्शन को परिभाषा से मेल खाना चाहिए फ़ंक्शन पॉइंटर। मैंने इसके साथ कुछ समय तक संघर्ष किया और मुझे यह समझने में परेशानी हो रही है कि यहां क्या समस्या है। किसी भी मदद की सराहना की जाती है।

--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;
};
0
Mitch 13 अक्टूबर 2020, 18:34

2 जवाब

सबसे बढ़िया उत्तर

मैंने कोशिश की कि फंक्शन पॉइंटर टाइपपीफ के हर संयोजन की तरह क्या महसूस हुआ और अंत में मुझे लगता है कि लैम्ब्डा काम करता है। मदद के लिए सभी का धन्यवाद।

--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;
};
0
Mitch 19 अक्टूबर 2020, 04:03

इसे बदलें

        typedef std::function<int(int)> funcptr;

(btw using इन दिनों typedef की तुलना में अधिक मुहावरेदार है) और

myfuncptr = [this](int x){ return defaultFunc(x); };
0
bipll 13 अक्टूबर 2020, 18:39