2010-04-04 64 views
3

我想知道如何實現標題中陳述的內容。我試着像...std :: for_each在具有1個參數的成員函數上

std::for_each(a.begin(), a.end(), std::mem_fun_ref(&myClass::someFunc))

,但我得到一個錯誤說的「術語」(I「M假設這意味着第三個參數)不計算爲一個函數參數1 ,即使someFunc沒有采取一個參數 - 對象的類型存儲在a

我想知道如果我想要做的是可能使用標準庫(我知道我可以輕鬆地使用boost )

PS使用for_eachmem_fun_ref與只通過手動迭代a並將對象傳遞給someFunc相比,有任何性能影響?

回答

2

儘管someFunc是具有一個參數的成員,但mem_fun_ref使用隱含的「myClass」第一個參數。你想使用矢量的項目作爲第二個參數。

而使用for_each和mem_fun_ref可能沒有負面的性能影響。編譯器將生成可比較的代碼。但是,唯一可以確定的方法是基準:)

std::for_each(a.begin(), a.end(), 
       std::bind1st(
        std::mem_fun_ref(&MyClass::SomeFunc), 
        my_class)); 
+0

我假設我會使用bind2nd。現在我正在考慮如何指定在迭代中使用當前元素。我想我只會使用提升.. – Person 2010-04-04 02:58:41

+0

不,仍然使用bind1st。 mem_fun_ref變成一個帶有兩個參數的函數。第一個是MyClass,第二個是你的成員函數參數。您想要將第一個參數綁定到mem_fun_ref到您的類實例。 – Stephen 2010-04-04 03:50:12

+1

@Person:如果你要使用Boost,我建議使用他們的foreach宏。 'std :: for_each'只是一個失敗的想法,並且通常會導致更多的擴展,更難以閱讀代碼。 – GManNickG 2010-04-04 03:52:14

1

我想你需要使用bind_1st來提供隱藏的「this」參數。或者你的意思是「這個」是唯一的參數,someFunc沒有自己的參數?

+0

someFunc有一個參數。像myClass :: someFunc(someType)。 – Person 2010-04-04 02:27:21

相關問題