В настоящее время я создал класс с именем A, который создает массив указателей на функции, а также объявил прототипы функций, пожалуйста, просмотрите A.h ниже.
#ifndef A_H
#define A_H
class A
{
public:
//Function Definitions that will be called from the seq function below.
A::A()
//prototype functions that will be pointed to from array
void f1(int);
void f2(int);
void f3(int);
void (*funcs[3])(int);
//Destructor method
virtual ~A();
};
Затем у меня есть A.cpp, определенный ниже с определениями функций f1, f2, f3.
A::A()
{
}
void A::f1(int a){ cout << "This is f1: " << endl; }
void A::f2(int b){ cout << "This is f2: " << endl; }
void A::f3(int c){ cout << "This is f3: " << endl; }
//Would this be valid?
funcs[0] = f1;
funcs[1] = f2;
funcs[2] = f3;
A::~A()
{
//dtor
}
Как мне получить доступ к массиву из main.cpp
include "A.h"
.
.
.
int main()
{
//This doesn't work, what is the proper way to access the pointers to functions?
A a;
a.funcs[0](1);
}
Должен распечатать «Это f1:». Это действительно беспокоило меня, я читал разные темы и даже использовал typedefs, но безрезультатно. Любая помощь будет действительно оценена. Если вам нужна дополнительная информация, пожалуйста, дайте знать.
//Would this be valid?Нет. Здесь нельзя использовать функции-члены класса, отличные отstatic. Я бы рекомендовал вам использоватьstd::functionи лямбда-выражение для захватаa. - person   schedule 04.02.2018static, если вы хотите, чтобы они были реальными функциями, а не методами класса. - person Sam Varshavchik   schedule 04.02.2018f1();. У вас должен быть экземпляр класса, метод которого можно вызвать, напримерa.f1();. - person Sam Varshavchik   schedule 04.02.2018