[英]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.