如何将方法名称(此处为some_method
)设为模板参数?
template<typename T>
void sv_set_helper(T& d, bpn::array const& v) {
to_sv(v, d.some_method());
}
答案 0 :(得分:22)
没有“模板标识符参数”这样的东西,因此您无法将名称作为参数传递。但是,您可以将成员函数指针作为参数:
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 );
答案 1 :(得分:21)
这是一个简单的例子......
#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...
}