Имя метода С++ в качестве параметра шаблона Как мне изменить имя метода (здесь some_method)? template<typename T> void sv_set_helper(T& d, bpn::array const& v) { to_sv(v, d.some_method()); } Ответ 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... }
Ответ 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... }