2011-09-26 40 views

Trả lời

18

Không có thông tin như 'tham số nhận dạng mẫu', vì vậy bạn không thể chuyển tên dưới dạng thông số. Tuy nhiên, bạn có thể lấy con trỏ hàm thành viên làm đối số:

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

giả sử hàm có loại trả về void. Và bạn sẽ gọi nó là như thế này:

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

Cảm ơn! Đưa T :: * SomeMethod vào dấu ngoặc đơn làm cho giải pháp này hoạt động. –

18

Đây là một ví dụ đơn giản ...

#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 Cảm ơn, bạn đã có phần '. * F' ngay trước K-ballo, nhưng câu trả lời của anh ấy là trước tiên. –

Các vấn đề liên quan