2011-09-26 42 views

cevap

18

'Şablon tanımlayıcı parametresi' diye bir şey yoktur, bu nedenle adları parametre olarak geçiremezsiniz. Bununla birlikte argüman olarak bir üye işlev işaretçisi olabilir: fonksiyonunu farz ediyor

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

bir void dönüş türüne sahip. Ve bunu böyle arayacak:

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

teşekkürler! T :: * SomeMethod'u parantez içine koymak bu çözümü çalışır hale getirir. –

18

İşte basit bir örnek ...

#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 Teşekkürler, K-ballo'dan hemen önce. * F 'parçası vardı, ama cevabı ilk sıradaydı. –

İlgili konular