C ++方法名称作为模板参数

时间:2011-09-26 16:10:39

标签: c++ templates

如何将方法名称(此处为some_method)设为模板参数?

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

2 个答案:

答案 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...
}