назначение std :: function для функции-члена

class A {
public:
std::function<void(int)> f_;
void print_num(int i) {
cout << i;
}
void setFuntion(std::function<void(int)> f) {
f_=f;
}
void run() {
setFunction(print_num);
}
};

это не работает я получил note: no known conversion for argument 1 from ‘<unresolved overloaded function type>’ to ‘std::function<void(int)>’ и другие ошибки.

Если я поставлю определение print_num вне класса. все работает. я пытался добавить &A::, A:: а также this. ничего не помогло.

3

Решение

print_num является нестатической функцией-членом, что означает, что она имеет неявный первый аргумент типа A*, Вы можете, например, передать это с помощью лямбды:

void run() {
auto myself = this;
setFunction( [myself] (int i) { myself->print_num (i); } );
}

или использовать bind, посмотреть здесь

Перегруженная функция устранения неполадок c ++: <неразрешенный тип перегруженной функции>

3

Другие решения

Других решений пока нет …

По вопросам рекламы [email protected]