предварительное объявление общего указателя - PullRequest
0 голосов
/ 08 марта 2011

У меня есть интерфейс Interface.У меня также есть .h файл InterfaceFwd.h, который выглядит примерно так:

#ifndef Blah
#define Blah
#include <boost/shared_ptr.hpp>
class Interface;
typedef boost::shared_ptr<Interface> InterfacePtr;
#endif

У меня также есть Interface.h

#ifndef SomeOtherBlah
#define SomeOtherBlah
class Interface
{
   virtual ~Interface()
   { 
   }
   ... 
};
typedef boost::shared_ptr<Interface> InterfacePtr;
#endif

Нужно ли беспокоиться, если оба файла включены туда?будет дубликат объявления InterfacePtr?На моем компиляторе это хорошо компилируется, но допускает ли стандартное правило одноопределения несколько идентичных объявлений typedef?Кроме того, как вы думаете, я должен включить InterfaceFwd.h в Interface.h вместо повторного выделения InterfacePtr или это нормально, как есть?

Заранее спасибо

1 Ответ

2 голосов
/ 08 марта 2011

Одно правило определения не применяется к typedef с.A typedef (сам по себе) не определяет новую переменную, функцию, тип класса, тип перечисления или шаблон.Вам явно разрешено переопределить предыдущее typedef-name для ссылки на тип, к которому оно уже относится.

7.1.3 [dcl.typedef]:

В данной области, не относящейся к классу, спецификатор typedef может использоваться для переопределения имени любого типа, объявленного в этой области, для ссылки на тип, к которому он уже относится.

...