Я пытаюсь понять концепцию и ошибку. что с этим не так?
class A
{
public:
A()
{
std::function<void(int)> testFunc(&A::func);
}
private:
void func(int) {}
}
мой вопрос: возможно ли создать какой-либо объект, способный вызвать член определенного экземпляра, где std:: function действует как указатель на функцию-член, за исключением того, что не может быть использовано нечеткое определение типа, которое невозможно использовать как функциональные параметры в наследующих классах. например:
class A
{
public:
A()
{
index[WM_CREATE] = &A::close;
index[WM_DESTROY] = &A::destroy;
}
protected:
map<UINT msg, void (A::*)(HWND, UINT , WPARAM, LPARAM)> index;
void close(HWND,UINT, WPARAM, LPARAM);
void destroy(HWND, UINT, WPARAM, LPARAM);
};
class B : public A
{
public:
B()
{
index[WM_CREATE] = &B::create; // error because it not a pointer of type A::*
}
private:
void create(HWND, UINT, WPARAM, LPARAM);
};
Я думаю, что я нахожусь на правильном пути использования std:: functions следующим образом:
class A
{
public: // Gigantic stl error with these two
A() // |
{ // V
index[WM_CREATE] = std::function<void(HWND, UINT, WPARAM, LPARAM>(&A::close);
index[WM_DESTROY] = std::function<void(HWND, UINT, WPARAM, LPARAM>(&A::destroy);
}
protected:
map<UINT msg, std::function<void(HWND, UINT, WPARAM, LPARAM)> > index;
void close(HWND,UINT, WPARAM, LPARAM);
void destroy(HWND, UINT, WPARAM, LPARAM);
};
class B : public A
{
public: // and this one
B() // |
{ // V
index[WM_CREATE] = std::function<void(HWND, UINT, WPARAM, LPARAM)>(&B::create);
}
private:
void create(HWND, UINT, WPARAM, LPARAM);
};
если кто-то может объяснить, что означают эти гигантские критические ошибки и как их исправить, я бы очень признателен.