Итак, я нашел решение для моего проекта, используя указатели функций. Сначала я сделал свои функции как, а затем сохранил эти указатели функций в массиве указателей на функции. Сохраняя эти указатели функций в массив указателей функций, я подсчитал, сколько элементов будет сохранено в моем массиве указателей функций. Таким образом, используя эти подсчитанные значения, я могу перебирать каждый элемент моего массива функций. На самом деле все мои функции были в классе. так что мои функции были на самом деле функциями-членами.
Чтобы использовать указатели на функции-члены, мне нужно было создать структурный тип указателя на функцию. А также объявите новую переменную-указатель функции в моем классе с именем CC, чтобы использовать ее во всей области видимости своего класса.
typedef void(CC::FunctionPointers)();
FunctionPointers* FunctionPointerArray;
FunctionPointerArray = (FunctionPointers*)malloc(sizeof(FunctionPointers) * 4); // I will just say 4 conditions right ere.
// Malloc-ing the FunctionPointers type can be possible, or there is another option
// like making direct array (Both two are the same in terms of operation)
И затем у меня есть объявление и определение функции в моем классе с именем CC.
void aFunc() { cout << "in a()" << endl; }
void bFunc() { cout << "in b()" << endl; }
void cFunc() { cout << "in c()" << endl; }
void dFunc() { cout << "in d()" << endl; }
Затем я делаю функцию-член массива указателей на функцию-указатель. И давайте сохраним это возвращаемое значение как totalIterCounts
int GenerateFunctionPointers(void){
if(a) FunctionPointerArray[0] = &CC::aFunc();
if(b) FunctionPointerArray[1] = &CC::bFunc();
if(c) FunctionPointerArray[2] = &CC::cFunc();
if(d) FunctionPointerArray[3] = &CC::dFunc();
return a + b + c + d; // To set exact iteration counts;
}
Тогда Когда мне нужно будет вызвать мои функции, я сделаю это l oop для вызова моих функций.
void callFunctions(){
for (int i = 0 ; i < totalIterCounts ; i++){
(this->*FunctionPointerArray[i])();
}
Таким образом, в целом весь мой класс будет выглядеть примерно так:
class CC{
Public:
typedef void(CC::FunctionPointers)();
FunctionPointers* FunctionPointerArray = NULL;
// I do know that using non-variable in malloc is kind of meaningless.
int totalIterCounts; // To count how many iterations I need.
CC(){
totalIterCounts = GenerateFunctionPointers();
}
void aFunc() { cout << "in a()" << endl; }
void bFunc() { cout << "in b()" << endl; }
void cFunc() { cout << "in c()" << endl; }
void dFunc() { cout << "in d()" << endl; }
int GenerateFunctionPointers(void){
FunctionPointerArray = (FunctionPointers*)malloc(sizeof(FunctionPointers) * 4)
//I have not initialized every element here, Assigning NULL would be safer.
if(a) FunctionPointerArray[0] = &CC::aFunc();
if(b) FunctionPointerArray[1] = &CC::bFunc();
if(c) FunctionPointerArray[2] = &CC::cFunc();
if(d) FunctionPointerArray[3] = &CC::dFunc();
return a + b + c + d; // To set exact iteration counts;
}
void CallFunctions(){
for (int i = 0 ; i < totalIterCounts ; i++){
(this->*FunctionPointerArray[i])();
}
}
И функция CallFunctions()
может быть вызвана извне в будущем. Это решение сработало для меня прошлой ночью. Отдельное спасибо всем, кто помог мне с этим вопросом!
Я впервые отвечаю на свой вопрос в Stackoverflow, поэтому у меня могут возникнуть некоторые проблемы с этим ответом. Пожалуйста, дайте мне знать, если я должен изменить или отредактировать что-то. Еще раз большое спасибо.