LINUX.ORG.RU

История изменений

Исправление 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) тоже не хочет превращаться.