2011-09-12 45 views
5

這裏是我的課是如何定義的總體思路(它執行其他操作比什麼是下面提到)的std ::在成員函數的for_each使用與有兩個參數

struct Funktor 
{ 
    Funktor(int val):m_val(val){} 
    bool operator()(int arg1, int arg2) { return m_val==arg1*arg2; } 
    int m_val; 
}; 

現在我有一個向量上面的對象,我試圖調用operator()使用for_each,有沒有辦法做到這一點?我知道這可以使用bind2nd和mem_func_ref來完成,但是當只有一個參數但是有兩個參數時,我沒有找到方法。

int main() 
{ 
    std::vector<Funktor> funktors; 
    funktors.push_back(Funktor(10)); 
    funktors.push_back(Funktor(20)); 
    funktors.push_back(Funktor(30)); 

    int arg1 = 5, arg2 = 6; 
    //instead of the for loop below I want to use for_each 
    for(std::vector<Funktor>::iterator itr = funktors.begin(); funktors.end() != itr; ++itr) 
    { 
     (*itr)(arg1,arg2); 
    } 
} 

感謝您的任何幫助。最好。

CV

+1

你能澄清你爲什麼要這樣做嗎?它看起來像一個沒有操作。 –

+0

@Mark:你的意思是operator()不做任何事情嗎?這只是爲了瞭解我班的結構。 – blueskin

+0

@blueskin:他的意思是'std :: for_each'放棄了它給出的仿函數的結果,所以返回的'bool'永遠不會被使用,這使得這個特定的樣本毫無意義。 – ildjarn

回答

7

C++ 03解決方案(無升壓):

另寫仿函數爲:

struct TwoArgFunctor 
{ 
    int arg1, arg2; 
    TwoArgFunctor(int a, int b) :arg1(a), arg2(b) {} 

    template<typename Functor> 
    bool operator()(Functor fun) 
    { 
     return fun(arg1, arg2); //here you invoke the actual functor! 
    } 
}; 

然後用它作爲:

std::for_each(funktors.begin(),funktors.end(), TwoArgFunctor(arg1,arg2)); 

C++ 11解決方案:

std::for_each(funktors.begin(),funktors.end(), 
         [&] (Funktor f) -> bool { return f(arg1,arg2); }); 
+0

C++ 03解決方案將工作。謝謝。另外,'[&](funktor f) - > bool'語法看起來很有趣,請問這到底是什麼意思? – blueskin

+0

@blueskin:您可以在這裏熟悉那個有趣的語法:http://en.wikipedia.org/wiki/C%2B%2B0x#Lambda_functions_and_expressionions – Nawaz

+1

感謝您的鏈接Nawaz – blueskin

相關問題