Làm cách nào để đặt tên phương thức (ở đây some_method
) một tham số mẫu?Tên phương thức C++ làm tham số mẫu
template<typename T>
void sv_set_helper(T& d, bpn::array const& v) {
to_sv(v, d.some_method());
}
Làm cách nào để đặt tên phương thức (ở đây some_method
) một tham số mẫu?Tên phương thức C++ làm tham số mẫu
template<typename T>
void sv_set_helper(T& d, bpn::array const& v) {
to_sv(v, d.some_method());
}
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);
Đâ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...
}
+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ảm ơn! Đưa T :: * SomeMethod vào dấu ngoặc đơn làm cho giải pháp này hoạt động. –