История изменений
Исправление quasimoto, (текущая версия) :
сделай себе шаблонную функцию
Зачем? Вот есть у меня Class::handler использующий контекст Class и я хочу сделать что-то вроде signal(some_sig, statically(Class::handler)) внутри метода класса или где-то ещё. По идее, анонимная функция с замыканием должна помочь, так как (gcc only):
struct class {
// ...
void(*handler)(void *this, int sig);
};
// closure around `class_obj':
void handler_(int sig) { class_obj->handler(class_obj, sig); }
signal(some_sig, handler_);
Class::Caller()::<lambda(int)> в void (*)(int) тоже не хочет превращаться.
Исправление quasimoto, :
сделай себе шаблонную функцию
Зачем? Вот есть у меня Class::handler использующий контекст Class и я хочу сделать что-то вроде signal(some_sig, statically(Class::handler)) внутри класса или во вне. По идее, анонимная функция с замыканием должна помочь, так как (gcc only):
struct class {
// ...
void(*handler)(void *this, int sig);
};
// closure around `class_obj':
void handler_(int sig) { class_obj->handler(class_obj, sig); }
signal(some_sig, handler_);
Class::Caller()::<lambda(int)> в void (*)(int) тоже не хочет превращаться.
Исходная версия quasimoto, :
сделай себе шаблонную функцию
Зачем? Вот есть у меня Class::handler использующий контекст Class и я хочу сделать что-то вроде signal(some_sig, statically(Class::handler)) внутри класса или во вне. По идее, анонимная функция с замыканием должна помочь, так как (gcc only):
struct class {
// ...
void(*handler)(void *this, int sig);
};
// closure around `class_obj':
void handler_(int sig) { class_obj.handler(&x, sig); }
signal(some_sig, handler_);
Class::Caller()::<lambda(int)> в void (*)(int) тоже не хочет превращаться.