2011-09-26 40 views
16

如何使方法名稱(此處爲some_method)爲模板參數?C++方法名稱作爲模板參數

template<typename T> 
void sv_set_helper(T& d, bpn::array const& v) { 
    to_sv(v, d.some_method()); 
} 

回答

18

沒有「模板標識符參數」這樣的東西,所以您不能將名稱作爲參數傳遞。然而,你可能需要一個成員函數指針作爲參數:

template<typename T, void (T::*SomeMethod)()> 
void sv_set_helper(T& d, bpn::array const& v) { 
    to_sv(v, (d.*SomeMethod)()); 
} 

這是假設的功能有void返回類型。你會這樣稱呼它:

sv_set_helper< SomeT, &SomeT::some_method >(someT, v); 
+0

謝謝!將T :: * SomeMethod放在括號內可以使此解決方案有效。 –

18

下面是一個簡單的例子...

#include <iostream> 

template<typename T, typename FType> 
void bar(T& d, FType f) { 
    (d.*f)(); // call member function 
} 


struct foible 
{ 
    void say() 
    { 
    std::cout << "foible::say" << std::endl; 
    } 
}; 

int main(void) 
{ 
    foible f; 
    bar(f, &foible::say); // types will be deduced automagically... 
} 
+0

+1謝謝,你在K-ballo之前有'。* f'部分,但他的回答是第一個。 –