У меня есть функтор, как этотРазыменование указатель на функтор внутри разыменованного класса
struct foo
{
int a;
foo(a) : a(a) {}
int operator()(int b) { return a+b; }
};
и класс, как этот
class bar
{
public:
foo* my_ftor;
bar(foo* my_ftor) : my_ftor(my_ftor) {}
~bar() {}
};
Теперь предположим, указатель на этот класс, который содержит указатель на обув ,
foo MyFoo(20);
bar MyBar(&MyFoo);
В функции передаю ссылку на бар, и я хочу запустить функтор. У меня это работает следующим образом:
void AnyFunction(bar* RefToBar)
{
int y;
y = RefToBar->my_ftor->operator()(25);
}
Есть ли какой-либо другой «очистительный» способ разыменовать функтор? Что-то похожее на
y = RefToBar->my_ftor(25);
не будет работать, к сожалению ...
Любая идея? Спасибо
(* RefToBar-> my_ftor) (25) –
Вы также можете создать класс смарт-указатель на функтор, который сам по себе функтор и просто называет 'оператор()' из направленный объект. С C++ 11 можно сделать полностью общий шаблон. –
bar * не является ссылкой – zoska