Site Tools


c_ptrfunc

указатель на функцию

  void func(int xIn){
      cout << "from func(): " << xIn << endl;
  }
  
  int main(int argc, char *argv[]){
      func(12);
  
      void (*ptrFunc)(int); // возврат_из_функции (*имя_указателя)(вводимые_аргументы)
      ptrFunc = func;
  
      ptrFunc(19);
  
  }

вывод:

from func(): 12
from func(): 19

указатель на статичный метод

class MyClass{
public:
    static void method(int xIn){
        cout << "from MyClass::method() " << xIn << endl;
    }
};

int main(int argc, char *argv[]){
    MyClass::method(23);
    void (*ptrMethod)(int);
    ptrMethod = &MyClass::method;
    ptrMethod(44);
}

вывод:

from MyClass::method() 44

указатель на метод

  class MyClass{
  public:
      int method(int xIn){
          cout << "from MyClass::method() " << xIn << endl;
          return 0;
      }
  };
  
  int main(int argc, char *argv[]){
      int (MyClass::*ptrMethod)(int); // возвращаемый_из_функции_тип (ИмяКласса::*имя_указателя)(типы_аргументов);
      ptrMethod = &MyClass::method; // имя_указателя = &ИмяКласса::имяМетода;
      // можно совместить:
      //int (MyClass::*ptrMethod)(int) = &MyClass::method
      
      MyClass obj;
      (obj.*ptrMethod)(44);
  
      MyClass* ptrObj;
      (ptrObj->*ptrMethod)(54);
  }

вывод:

from MyClass::method() 44
from MyClass::method() 54

Вызов функции через текстовую переменную

void updateInfo()
{
  ...
}

map <string, void (*)()> mFunctions;
mFunctions["updateInfo"] = updateInfo;
//и так далее для всех функций, что нужно использовать
...
string sFunctionName;
... 
//где-то там считали имя функции

mFunctions[sFunctionName]();//выполнили нужную функцию
mFunctions["updateInfo"]();//то же самое


пример пример2

You could leave a comment if you were logged in.
c_ptrfunc.txt · Last modified: 2013/04/07 00:42 by konovalov

Page Tools