Возможные Дублировать:
Disabling “bad function cast” warning"значение типа "пустоте (exeCallback :: *) (INT)" не могут быть отнесены к сущности типа "пустоте (*) (Int)""
Я пытаюсь обернуть свой мозг вокруг указателей функций C++. Чтобы сохранить базовый уровень обучения, я создал пример указателя функции тестирования. В конце концов, я хотел бы передать полностью готовые экземпляры объектов по ссылке, чтобы я мог вызвать метод объекта; однако, ради изучения и понимания, я хотел бы остановиться на основах указателей функций C++. Я создал рабочий пример, используя только файл .cpp, но часть, которой я не преуспеваю, - это использование указателей функций в .cpp и .h. Что я не делаю правильно, чтобы мой пример обучения успешно работал при использовании файлов .cpp и .h?
Я создал два файла exeCallback.h и exeCallback.cpp.
.h файл
/*
File: exeCallback.h
Header file for exeCommand Library.
*/
#ifndef EXECALLBACK_H
#define EXECALLBACK_H
#include "mbed.h"
#include <map>
class exeCallback
{
public:
exeCallback();
void my_int_func(int x);
void (*foo)(int);
private:
};
#endif
.cpp файл:
/*
File: exeCallback.cpp
Execute functions in other Sensor libraries/classes
Constructor
*/
#include "mbed.h"
#include "ConfigFile.h"
#include "msExtensions.h"
#include "cfExtensions.h"
#include "exeCallback.h"
exeCallback::exeCallback()
{
foo = &exeCallback::my_int_func;
/* call my_int_func (note that you do not need to write (*foo)(2)) */
foo(2);
}
void exeCallback::my_int_func(int x)
{
printf("%d\n", x);
}
http://stackoverflow.com/questions/130322/how-do-you-pass-a-member-function-pointer – SomeWittyUsername
Если возможно, ознакомьтесь с ['std :: function'] (http: // en .cppreference.com/w/cpp/utility/function/function) и ['std :: bind'] (http://en.cppreference.com/w/cpp/utility/functional/bind). Класс 'std :: function' позволяет создать общую оболочку функций, которая может содержать любой тип функции, а функция' std :: bind' позволяет привязать любую функцию к переменной типа функции. –
@JoachimPileborg и вариационный конструктор 'std :: function' позволяет вам выполнять привязку в некоторых случаях без явного использования' std :: bind', что приятно. – juanchopanza