Имя метода C ++ в качестве параметра шаблона - PullRequest
21 голосов
/ 26 сентября 2011

Как сделать имя метода (здесь some_method) параметром шаблона?

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

Ответы [ 2 ]

22 голосов
/ 26 сентября 2011

Вот простой пример ...

#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...
}
22 голосов
/ 26 сентября 2011

Не существует такого понятия, как «параметр идентификатора шаблона», поэтому вы не можете передавать имена в качестве параметров. Однако вы можете взять указатель на функцию-член в качестве аргумента:

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 );
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...