如何通過需要自由函數的成員函數?問題如下:考慮這段代碼:#include <iostream>class aClass{public:
void aTest(int a, int b)
{
printf("%d + %d = %d", a, b, a + b);
}};void function1(void (*function)(int, int)){
function(1, 1);}void test(int a,int b){
printf("%d - %d = %d", a , b , a - b);}int main (int argc, const char* argv[]){
aClass a();
function1(&test);
function1(&aClass::aTest); // <-- How should I point to a's aClass::test function?
return 0;}我如何使用a's aClass::test作為參數function1?我堅持這樣做。我想訪問該班級的成員。
3 回答
偶然的你
TA貢獻1841條經驗 獲得超3個贊
但您也可以在不將class實例作為function1C ++ 11中的顯式參數傳遞的情況下執行此操作:
#include <functional>using namespace std::placeholders;void function1(std::function<void(int, int)> fun){
fun(1, 1);}int main (int argc, const char * argv[]){
...
aClass a;
auto fp = std::bind(&aClass::test, a, _1, _2);
function1(fp);
return 0;}
一只萌萌小番薯
TA貢獻1795條經驗 獲得超7個贊
指向成員函數的指針與指向函數的指針不同。為了通過指針使用成員函數,您需要一個指向它的指針(顯然)和一個要應用它的對象。所以適當的版本function1將是
void function1(void (aClass::*function)(int, int), aClass& a) {
(a.*function)(1, 1);}并稱之為:
aClass a; // note: no parentheses; with parentheses it's a function declarationfunction1(&aClass::test, a);
- 3 回答
- 0 關注
- 512 瀏覽
添加回答
舉報
0/150
提交
取消
