2013-05-17 58 views
0

我努力做到以下幾點:傳遞一個模板類作爲參數arg到std ::綁定

template <typename T, template<typename> class G> 
class Chain 
{ 
//....................some irrelevant code............... 
std::function<void (Node<T, G>&)> method_ptr; 

template<typename M> 
void SetMethodPointer(M* m, void(M::*ptr)(Node<T, G>&)) 
{ 
     method_ptr(std::bind(ptr, m, std::placeholders::_1)); 
} 

其中

G<T> 

是一些模板類,並

Node<T, G> 

是另一個以G作爲模板參數的模板類。 請注意,這種模板設計本身是可以的,只要我使用簡單的函數指針,我就沒有問題;然而,這一次我需要一個指向鏈模板類中的另一個類方法的指針。

現在,編譯器(VS 2010)陳述了以下錯誤:

error C2664: 'void std::tr1::_Function_impl1<_Ret,_Arg0>::operator()(_Arg0) const' : cannot convert parameter 1 from 'std::tr1::_Bind<_Result_type,_Ret,_BindN>' to 'Node<T,G> '. 

我的問題,這是涉及到通過模板類節點作爲參數arg到std :: bind函數的一些問題?無論哪種方式,如果可能,我如何糾正這個錯誤?

謝謝你們。

+2

怎麼樣一個不錯的[SSCCE(http://sscce.org)(從名字SetMethodPointer猜測)? –

+0

不應該是'method_ptr = std :: bind(ptr,m,std :: placeholders :: _ 1);' – stardust

+0

'method_ptr = std :: bind(...);',你正在嘗試調用'method_ptr'。 – Xeo

回答

2
method_ptr(std::bind(ptr, m, std::placeholders::_1)); 

是調用函數method_ptr,它接受函數作爲參數。但method_ptr已宣佈接受Node<T, G>&

你想要做什麼可能是這個

method_ptr = std::bind(ptr, m, std::placeholders::_1); 
相關問題