C ++: хранить и вызывать указатели функций в векторе указателей функций - PullRequest
1 голос
/ 06 мая 2020

У меня сценарий, как показано ниже. Я пытаюсь

  1. сохранить адрес функции-члена C ++ в векторе указателей на функции.

  2. получить доступ к функции-члену C ++ с помощью этот вектор указателей на функции.

Я могу добавлять функции, но не могу их вызывать. Я получаю следующую ошибку:

ошибка: необходимо использовать '. ' или '-> ' для вызова функции указателя на член в

class allFuncs {
     private:
        std::vector<void *(allFuncs::*)(int)> fp_list; // Vector of function pointers

       void func_1(int a) {
           // some code
        }

       void func_2(int a) {
           // some code
        }

        void func_3() {
           // STORING THE FUNCTION POINTER INTO The VECTOR OF FUNCTION POINTERS
           fp_list.push_back(&func_2);
           fp_list.push_back(allFuncs::func_1);      
        }

        func_4() {
          // Calling the function through the function pointer in vector
          this->*fp_list.at(0)(100);  // this does not work 
        }
}

1 Ответ

1 голос
/ 06 мая 2020

Вам нужно использовать

(this->*fp_list.at(0))(100)

для вызова функции из вектора. Когда вы выполняете

this->*fp_list.at(0)(100)

, вызов функции (часть (100)) привязан к fp_list.at(0), поэтому в основном у вас есть

this->*(fp_list.at(0)(100))

, который не будет работать. Добавление скобок вокруг указателя доступа к функции исправляет, что this->*fp_list.at(0) становится функцией для вызова, а затем (100) используется для этой функции.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...