Моя первоначальная структура класса была похожа на:
//def.h
namespace A
{
struct X {};
}
и передайте объявления, где это необходимо:
//file that needs forward declarations
namespace A { struct X; }
После некоторого рефакторинга X
был перемещен в другое пространство имен, но для того, чтобы старый код оставался «работающим», были использованы директивы using
:
//def.h
namespace B
{
struct X {};
}
namespace A
{
using ::B::X;
}
Теперь мы можем получить доступ к тому же классу, сохраняя старый синтаксис A::X
, но предварительные объявления вызывают ошибки. Вторая проблема заключается в том, что сообщение об ошибке, которое я получаю, не указывает на то, где находятся предварительные объявления, а поиск/замена предварительных объявлений занимает много времени.
На данный момент я исправил проблему (сложный способ).
Каков наилучший подход к решению этой ситуации?
ИМО, using
вообще не должно быть, и весь код, использующий X
, должен быть реорганизован, чтобы приспособиться к новому пространству имен (это одно из решений), но, к сожалению, это не вариант.
Фактический код намного сложнее, это упрощенный пример.
fwd.h
не являетсяdef_fwd.h
, то есть заголовком, вся цель которого состоит в том, чтобы перенаправить объявление некоторых других имен заголовков? - person K-ballo   schedule 09.01.2013iosfwd
), Boost (отовсюду) и т. д. др. - person K-ballo   schedule 09.01.2013X
перемещено в существующее пространство именB
илиnamespace A
было переименовано вB
? В последнем случае не могли бы вы использовать псевдонимы пространств имен? - person TemplateRex   schedule 09.01.2013A
все еще существует. - person Luchian Grigore   schedule 09.01.2013