Подтвердить что ты не робот

Имя метода С++ в качестве параметра шаблона

Как мне изменить имя метода (здесь some_method)?

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

Ответ 1

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

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 );

Ответ 2

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

#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...
}