2016-11-06 65 views
-1

我有點新的C++ 11和我讀到this一篇關於仿函數,這是非常有幫助的,我只是認爲這是有可能使接收多單變量更多的是仿函數? 例如我們有下面的類:函子與兩個變量或多個

class my_functor{ 
public: 
    my_functor(int a,int b):a(a),b(b){} 

    int operator()(int y) 
    { 
     return a*y; 
    } 

private: 
    int a,b; 

}; 

現在我不知道有沒有什麼辦法,我們可以做一個成員函數像

operator()(int y) 

,但與2個或更多的(或未知的數字!)變量正在被接收?

+5

當然,爲什麼不呢?顯而易見的方法應該起作用,當您嘗試時,您是否面臨任何特定的問題? – hvd

+0

'operator()'只是一個時髦的函數名稱,它接收你寫下的很多參數。 – Deduplicator

回答

0

是的。你可以通過儘可能多的參數,只要你想operator()。例如見:

#include <iostream> 
class my_functor{ 
public: 
    my_functor(int a,int b):a(a),b(b){} 

    int operator()(int y) 
    { 
     return a*y; 
    } 

    int operator()(int x, int y) 
    { 
     return a*x + b*y; 
    } 

private: 
    int a,b; 
}; 

int main() 
{ 
    my_functor f{2,3}; 
    std::cout << f(4) << std::endl; // Output 2*4 = 8 
    std::cout << f(5,6) << std::endl; // Output 2*5 + 6*3 = 28 
    return 0; 
} 

要處理的參數數目未知的,你需要看不同的解決方案,用於處理可變數量的參數(基本上,#include <varargs.h>,或模板參數包)。

+0

哇謝謝!!!我發現我犯了一個錯誤,並寫了我的函數頭像「operator(,)(int x,int y)」 –