Как правильно направить объявление указателя на класс для использования внутри объявления класса? - PullRequest
1 голос
/ 04 октября 2011

Например,

   class Segment
   {
      friend bool someFunc( P_Segment p );
   };

typedef boost::shared_ptr<Segment> P_Segment;

Как лучше всего объявить P_Segment, чтобы он компилировался?

Ответы [ 4 ]

3 голосов
/ 04 октября 2011

В этом случае у вас нет выбора, так как вы не можете пересылать объявление typedefs.Вместо этого вам придется переадресовать объявленный класс Segment.

class Segment;

typedef boost::shared_ptr<Segment> P_Segment;

class Segment
{
    friend bool someFunc( P_Segment p );
};
1 голос
/ 04 октября 2011

Ничего плохого в том, что сказали другие, но только для альтернативы:

class Segment
{
public:
   typedef boost::shared_ptr<Segment> P_Segment;
   friend bool someFunc( P_Segment p );
};

using Segment::P_Segment;
0 голосов
/ 04 октября 2011

Другим способом было бы сделать typedef членом класса:

class Segment
{
    typedef boost::shared_ptr<Segment> pointer;
    friend bool someFunc( pointer p );
};

Конечно, это изменит ваш доступ к нему, вы не должны использовать Segment::pointer вне класса.

0 голосов
/ 04 октября 2011

Форвард объявляет ваш класс и после этого объявляет умный указатель (shared_ptr может принимать неполные типы):

   class Segment;
   typedef boost::shared_ptr<Segment> Segment_PTR;

   class Segment
   {
      friend bool someFunc(Segment_PTR p);
   };
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...