如何解决通过包含一个与另一个头文件同名的头文件而间接包含了另一个头文件的问题?
例如:
// src/blah/a.hpp
#ifndef A_HPP
#define A_HPP
namspace blah
{
class A
{
}
}
#endif
// src/blah/b.hpp
#ifndef B_HPP
#define B_HPP
#includes "a.hpp"
namspace blah
{
class B
{
}
}
#endif
// src/foo/a.hpp
#ifndef A_HPP
#define A_HPP
namspace foo
{
class A
{
}
}
#endif
// src/foo/c.hpp
#ifndef C_HPP
#define C_HPP
#includes "../b.hpp"
#includes "a.hpp" // won't be included due to multiple inclusion prevention
namspace foo
{
class C
{
}
}
#endif
在上一个头文件中,由于有多重包含预处理器保护,a.hpp不会被包含。实际上,这应该是可以的,因为这些类位于不同的命名空间中。我知道最简单的方法是只需更改foo/a.hpp的名称或在多重包含保护中使用虚假名称。但是否有更好的方法呢?
编辑: 我知道你可以通过在#define和#ifndef指令中使用更具描述性的名称来解决此问题(例如FOO_A_HPP和BLAH_A_HPP),但我想知道这是否是推荐或最佳方法。有些人会推荐使用不同的文件名作为更好的解决方案吗?还是说这并不重要?你会推荐使用哪种约定?
<NAMESPACE>_<CLASS>_HPP
代替
<CLASS>_HPP
为了更好地避免这些问题,有什么建议?