我想將類A的成員函數作爲參數傳遞給全局函數。我該做些什麼才能做到這一點?另外,這是一個好主意嗎?上下文:我想這樣做是因爲(同義詞)doSomething(...)
是一個非常通用的函數,用於main()
以及不同的類。因此,我可以避免在項目中有相同代碼的多個副本。什麼是替代品(如果它不是最佳的)?將類成員函數作爲參數傳遞給全局函數
#include <iostream>
using namespace std;
double doSomething(int i, double (*f)(double)) { return (*f)(i); }
class A{
public:
A(double x) : number(x) {}
double times(double i) { return ::doSomething(i, &A::multiply);} //calles the global function and gives a member function as parameter
double multiply(double i) {return number*i;}
private:
double number;
};
int main() {
A obj(5.0);
cout << obj.times(3.5) <<endl;
return 0;
}
編譯器抱怨:
../src/test5.cpp: In member function ‘double A::times(double)’:
../src/test5.cpp:17:63: error: cannot convert ‘double (A::*)(double)’ to ‘double (*)(double)’ for argument ‘2’ to ‘double doSomething(int, double (*)(double))’
double times(double i) { return ::doSomething(i, &A::multiply);} //calles the global function and gives a parameter member function as parameter
^
../src/test5.cpp:17:65: warning: control reaches end of non-void function [-Wreturn-type]
double times(double i) { return ::doSomething(i, &A::multiply);} //calles the global function and gives a parameter member function as parameter
在你的榜樣,我會仍然需要declair對象的類型'doSomething'希望。這意味着我仍然需要其他對象的相同代碼的副本。我認爲Wojtek Surowka重新考慮我的設計是正確的。謝謝您的回答。 – dani