Указатель функции-члена на объект функции - PullRequest
0 голосов
/ 24 декабря 2011

У меня есть класс с указателем на функцию в качестве члена. В определенном случае я хотел бы, чтобы этот указатель указывал на объект функции, это невозможно?

class C {
public:
    C();
private:
    void (*p)();
    struct Functor {
        void operator()() {
        }
    };
};

C::C() : p(Functor()) {
}

int main(int argc, char **argv) {
    C c;
}

Я получаю:

t.cpp: In constructor 'C::C()':
Line 12: error: cannot convert 'C::Functor' to 'void (*)()' in initialization

Ответы [ 2 ]

4 голосов
/ 24 декабря 2011

Нет, это невозможно.Тип Functor даже не близок к типу void(*)().Вы можете либо изменить элемент p на тип Functor, либо вы можете найти std::function:

std::function - это общееПолиморфная функция-обертка.Экземпляры std :: function могут хранить, копировать и вызывать любые вызываемые целевые функции, лямбда-выражения, выражения связывания или другие объекты функций.

1 голос
/ 24 декабря 2011

Нет, объект Functor не является указателем на функцию. Если вы хотите инициализировать p как Functor, вы должны объявить его так:

class C {
public:
    C();
private:
    struct Functor {
        void operator()() {
        }
    } p;
};
...