我有很多代码在功能上是这样的:
namespace Foo { namespace Bar { namespace Baz {
class MyType {};
Foo::Bar::Baz::MyType func(Foo::Bar::Baz::MyType const& param);
}}}
因为没有任何冲突的定义
MyType
,这可以很容易地简化如下:
namespace Foo { namespace Bar { namespace Baz {
class MyType {};
MyType func(MyType const& param);
}}}
我们已经节省了(令人尴尬的数量)的文本空间,开始删除我们庞大的扩展代码库中的这些事件。然而,由于我们是通过vgrep来实现的,所以它运行缓慢且容易出错。
理想情况下,会出现编译器警告。我们的代码库支持三种不同平台(Windows、Linux和Mac)上的三种不同编译器(MSVC、g++和Clang),主要分别是。
我找不到能帮助我们的警告,而且谷歌很难做到,因为人们会
class A { void A::method(void) {} };
错误很多(而且g++捕捉到了这一点,因为它不符合标准)。我们的问题是资格过高
命名空间
,不是由
类型
.
那么,我应该(至少)在上述编译器之一中启用什么警告?还有其他解决方案吗?