C ++ указатель на функцию-член, объявление - PullRequest
2 голосов
/ 20 ноября 2010

У меня есть следующий класс:

class Point2D
{
protected:

        double x;
        double y;
public:
        double getX() const {return this->x;}
        double getY() const {return this->y;}
...
 };

и указатель на функцию-член, объявленную в другом классе:

double ( Point2D :: *getCoord) () const;

Как объявить / инициализировать указатель на функцию-член для:

1] статическая функция-член класса

Process.h

class Process
{
   private:
      static double ( Point2D :: *getCoord) () const; //How to initialize in Process.cpp?
      ...
};

2] функция не-члена класса

Process.h

double ( Point2D :: *getCoord) () const; //Linker error, how do declare?

class Process
{
   private:
      ...
};

Ответы [ 2 ]

3 голосов
/ 21 ноября 2010

Единственное, что вы еще не сделали, - квалифицировали имя функции именем класса, членом которого она является. Вместо предоставления определения Process::getCoord вы объявили глобальный указатель на член с именем getCoord.

double ( Point2D::* Process::getCoord ) () const;

Вы можете предоставить инициализатор:

double ( Point2D::* Process::getCoord ) () const = &Point2D::getX;
1 голос
/ 20 ноября 2010

Согласно FAQ лучше использовать typedef:

typedef double (Point2D::*Point2DMemFn)() const;

class Process
{
      static Point2DMemFn getCoord;
      ...
};

Инициализация:

Process::getCoord = &Point2D::getX;
...