Как я могу сделать двойной указатель на функцию класса и члена?Указатель на класс И указатель на метод
В принципе, у меня есть некоторые (довольно много) общие классы, принимающие указатели на функции, как это:
void Gen::regCallback(void (*callback)(void const *), void const * callbackData)
и в классах, я часто либо функции, как этот
void Foo::doSomething(void const * instance) // this one is static
{
auto myself((Foo const *)instance);
myself->...do stuff...
myself->...do stuff...
myself->...do stuff...
}
или метод/функции близнецов
void Foo::doSomething(void const * instance) // this one is static
{
((Foo const *)instance)->doSomething();
}
void Foo::doSomething() const
{
...do stuff...
...do stuff...
...do stuff...
}
Я хотел бы как-то уменьшить беспорядок в коде (по регистрации непосредственно членов), Я знаю вариант:
void Gen::regCallback(void (Foo::*callback)(void const *), Foo const * member);
, но мне нужно сделать также типа класса (Foo), который будет принят в качестве параметра (т.е. Foo1, Foo2, FooTotallyDifferent)
По разным причинам я не могу использовать шаблон для типа класса, так
template <typedef T>
class Gen
{
void regCallback(void (T::*callback)(void const *), T const * member)
{
...
}
}
не вариант для меня
Вы рассмотрели использование 'станд :: function' и лямбда-функции? они облегчают всю обратную связь. –
@DavidHaim Хм ... Я не знал о std :: function, кажется правдоподобным, попытаюсь это сделать – chmirko