簡體   English   中英

在 C++ 中使用非靜態 class 函數的函數

[英]using functions of non-static class functions in C++

我有一個包含多個功能的 class,我希望能夠使用這些功能的功能。 當我嘗試執行類似以下代碼的操作時,我不斷收到編譯器錯誤消息“無效使用非靜態成員函數”。

class MyClass{
    protected:
        void f(int a, int b);
        void g(int num);
        void do_something_with_function(int count, void func(int, int));
        ...
        ...


};

void MyClass::do_something_with_function(int count, void func(int, int)){
    for(int i=0; i<count; i++){
        for(int x=0; x<5; x++){
            for(int y=0; y<3; y++){
                func(x,y);
            }
        }
    }
}

void MyClass::f(int a, int b){
    std::cout<<"a="<<a<<", b="<<b<<std::endl;
}

void MyClass::g(int num){
    do_something_with_function(num, f);
}

有沒有辦法在不使f (以及f依賴的所有函數)static 的情況下使其工作?

是的,您只需要接受指向成員 function 的指針,而不是常規的 function。

將定義更改為:

void MyClass::do_something_with_function(int count, 
                                         void (MyClass::*func)(int, int)) {
  // ...
  func(1, 2); // and use func
}

(當然,聲明也必須更改),並像這樣調用 function:

do_something_with_function(num, &MyClass::f);

這是一個演示

暫無
暫無

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

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