2016-08-07 6 views
1

Я пытаюсь отправить метод конкретного экземпляра класса в качестве аргумента функции (Foo), хотя я получаю эту ошибкуПереходя метод класса в качестве аргумента функции

недопустимого использование нестатического функция член ...

(от линии обув (a-> бар))

Я не уверен, почему я получаю эту ошибку? Есть ли возможность для этого?

#include <iostream> 
#include <functional> 

void foo(std::function<void(void)> _func) 
{ 
    _func(); 
} 

class A 
{ 
public: 
    A() 
    { 
     x = 5; 
    } 
    void bar() 
    { 
     std::cout << x << std::endl; 
    } 

private: 
    int x; 
}; 

int main() { 
    A a; 
    foo(a->bar); 
    return 0; 
} 

ответ

5

У вас есть два варианта:

  1. Используйте std::bind: foo(std::bind(&A::bar, a)):

  2. Использование lambdas: foo([&a]() { a.bar(); });

+0

@songyuanyao Да, он должен. Благодарю. :) –

0

Ваш метод не совместим с STD :: функцию , даже похоже. Каждый метод имеет неявный первый аргумент, это.

Так ваша подпись выглядит следующим образом

void bar(A* this) { /* ... */ } 

Это не так для статических методов. Они подобны функциям в пространстве имен класса и

static void bar() { /* ... */ } 

Будет насыщен std :: function.

Тем не менее, использование лямбда (C++ 11), скорее всего, является лучшим способом для примера ур.

Смежные вопросы