前向声明在代码重构后导致错误

Luc*_*ore 5 c++ refactoring namespaces using-directives forward-declaration

我原来的类结构类似于:

//def.h
namespace A
{
   struct X {};
}
Run Code Online (Sandbox Code Playgroud)

并在需要时转发声明:

//file that needs forward declarations
namespace A { struct X; }
Run Code Online (Sandbox Code Playgroud)

经过一些重构后,X被移动到不同的命名空间,但是为了保持旧代码"工作" using指令的使用:

//def.h
namespace B
{
   struct X {};
}
namespace A
{
   using ::B::X;
}
Run Code Online (Sandbox Code Playgroud)

现在我们可以访问保持旧语法的同一个类A::X,但前向声明会导致错误.第二个问题是我得到的错误消息并未指向前向声明的位置,并且查找/替换前向声明非常耗时.

现在我解决了问题(困难的方法).

处理这种情况的最佳方法是什么?

IMO,using根本不应该存在,并且所有使用的代码都X应该被重构以容纳新的命名空间(这是一个解决方案),但不幸的是,这不是一个选项.

实际代码要复杂得多,这是一个简化的例子.

BЈо*_*вић 1

最好的方法是修复代码。

您可以分两步完成:

  1. 修复所有前向声明
  2. 消除using ::B::X;