Я пытаюсь написать программу, которая создает класс, который содержит вектор указателей на функции-члены, с add()
и remove()
функции-члены. Код я написал это -Вектор указателя на функции-член
1 #include <iostream>
2 #include <vector>
3 using namespace std;
4
5 typedef void(*classFuncPtr)();
6
7 class FunctionVectors
8 {
9 private:
10 vector<classFuncPtr> FunctionPointerVector;
11 public:
12 FunctionVectors(){}
13 void add(classFuncPtr funcPtr);
14 void remove(int index);
15 void run();
16 void a(){cout<<"a: Why are you calling me?"<<endl;}
17 };
18
19 void FunctionVectors::add(classFuncPtr funcPtr)
20 {
21 FunctionPointerVector.push_back(funcPtr);
22 }
23
24 void FunctionVectors::remove(int index)
25 {
26 FunctionPointerVector.erase(FunctionPointerVector.begin() + index);
27 }
28
29 int main()
30 {
31 FunctionVectors f;
32 classFuncPtr fv = &(classFuncPtr)FunctionVectors::a;
33
34 f.add(fv);
35 f.run();
36
37 return 0;
38 }
Но он показывает ошибку в строке # 32 -
error C2440: 'type cast' : cannot convert from 'void (__thiscall FunctionVectors::*)(void)' to 'classFuncPtr'
Пожалуйста, скажите мне, как я должен изменить его, чтобы работать должным образом.
Заранее спасибо.
Я предлагаю вам использовать зЬй :: функцию вместо сырых указателей на функции (повышение :: функции, если вы не можете использовать C++ 11) –
Посмотрите на 'std :: mem_fn'. –
Если вы хотите сохранить указатель на функцию-член, вам понадобится [указатель на функцию-член] (http://en.cppreference.com/w/cpp/language/pointer#Pointers_to_member_functions), а не простой указатель функции. Но более общий тип типа ['std :: function'] (http://en.cppreference.com/w/cpp/utility/functional/function), вероятно, будет легче справиться. –