class A {
public:
char *f1(int v) {};
char *f2(int v) {};
}
template <???fname???>
int F(A *a, int b) {
return a->fname(b);
}
Можно ли описать функцию, которая в зависимости от аргумента темплейта вызывала бы метод f1() или f2()?
template <int f>
int F(A *a, int b) {
abort();
}
template<>
int F<1>(A *a, int b) {
return a->f1(b);
}
template<>
int F<2>(A *a, int b) {
return a->f2(b);
}
#include <iostream> // std::cout
struct A
{
int f1(int v) {return v * 5;}
int f2(int v) {return v * 10;}
};
template <typename Foo>
int F(int b, A * a, Foo foo)
{
return (a->*foo)(b);
}
int main ()
{
A * a = new A;
std::cout << F(5, a, &A::f1) << '\n';
std::cout << F(10, a, &A::f2) << '\n';
return 0;
}