簡體   English   中英

C ++非靜態函數作為變量

[英]C++ Non static functions as variables

   class manip{
public:
    int t;
    manip(int tom){
        t = tom;
    }
    int sub(int val){
        return t - val;
    }
    int add(int val){
        return t + val;
    }
    int perform(int(manip::*key)(int), int val){
        return (this->*key)(val);
    }
};

int main() {
    manip g(5);
    cout << g.perform(&manip::add, 9) << ":" << g.perform(&manip::sub, 9);

(這只是我試圖在更大的代碼段中解決的問題的簡化版本)

問題出在這里

    int(b::*func)(int) = b::add;

    int c = func(2);

這在第二行給了我一個語法錯誤(因為我沒有引用“ this”數據)。 我如何更改它,以便被調用的函數不是b :: add而是inst.add。

編輯:張貼了代碼的工作版本。 謝謝Speed8ump

在您的示例中,“ func”是成員函數指針。 它必須數據類型的實例可使用它的成員:

int c = (inst.*func)(2);

您需要提供一個指向結構(或aA)的參數。

int main(){
    b inst(5)
    int(b::*func)(int, struct b*) = b::add;
    int c = func(2, &inst);
}

int add(int a, struct b* ptr){
    return a + ptr->aA;
}

如果您的編譯器足夠新,則可以避免使用函數指針,而應使用std :: function代替

 int(b::*func)(int) = b::add;

變成

#include <functional>
#include <iostream>
 class manip{
public:
    int t;
    manip(int tom){
        t = tom;
    }
    int sub(int val){
        return t - val;
    }
    int add(int val){
        return t + val;
    }
    int perform(std::function<int(manip*,int)>f, int val){
        return f(this, val);
    }
};

int main() {
    manip g(5);
    std::cout << g.perform(&manip::add, 9) << ":" << g.perform(&manip::sub, 9);
}

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM