Тип вывода, при использовании указателя на функцию-член в качестве аргумента шаблона
Когда я хочу иметь функцию-член в качестве аргумента шаблона, есть ли способ ее храмовать, не предоставляяCaller
тип?
struct Foo
{
template <typename Caller, void (Caller::*Func)(int)>
void call(Caller * c) { (c->*Func)(6); }
};
struct Bar
{
void start()
{
Foo f;
f.call<Bar, &Bar::printNumber>(this);
^^^^
}
void printNumber(int i) { std::cout << i; }
};
int main ()
{
Bar b;
b.start();
return 0;
}
когда я пытаюсь
template <void (Caller::*Func)(int), typename Caller>
void call(Caller * c) { (c->*Func)(6); }
и называть это как
f.call<&Bar::printNumber>(this);
я получаюCaller is not class...
ошибка.
Итак, есть ли способ позволить компилятору определять тип Caller?