有没有办法弃用命名空间?

Die*_*hez 6 c++ gcc namespaces clang

简短:有没有办法在gcc或clang中弃用命名空间?

长:

多年来,我们一直在各种命名空间中积累所有类型的东西.现在我们决定将一些命令放入其中,并将命名空间拆分为正确命名的命名空间; 所以:

namespace util
{
uint32_t codecID( const char * name ) ;

void alignStrings( std::vector< std::string > * strings ) ;
}
Run Code Online (Sandbox Code Playgroud)

应该成为

namespace codec
{

uint32_t codecID( const char * name ) ;

}

namespace fmt
{

void alignStrings( std::vector< std::string > * strings ) ;

}
Run Code Online (Sandbox Code Playgroud)

只是为了增加乐趣,旧命名空间是在几个包含文件中定义的.其中的所有内容都是内联/模板代码; 所以没有与之相关的库.

显而易见的解决方案是将所有定义从旧命名空间复制到新命名空间,并将所有内容标记为旧的命名空间,逐个项目已弃用.

我们不能在不破坏多个项目的情况下重命名命名空间.

现在我想知道是否有更好的方法来做这样的事情,例如将namespace util的使用标记为已弃用.

我们使用gcc 4.7.3作为我们的生产编译器,但是对clang进行构建和测试以尝试捕获gcc细节; 所以在这些编译器上工作的东西会有所帮助.

eer*_*ika 2

如果在新的头文件中定义新的命名空间,则可以使用#warning指令而不是逐项地完全弃用旧的、冗余的头文件。libstdc++就是这样做的。Clang 也支持该指令,但 MSVC 例如支持。