包含守卫在名称空间之间是否应该是唯一的?

Sul*_*lla 2 c++ namespaces include-guards include

我在两个名称空间中使用相同的类名,比如A和B.在包含不同命名空间的类时,包含警卫是否应该是唯一的?

我的意思是不能有两个文件名称AFile.h(在不同的目录中)具有相同的包含警卫和声明不同的命名空间?

档案1:

#ifndef AFILE_H

#define AFILE_H

命名空间A {

CAFile类

{...

};

};

#万一

文件2:

#ifndef AFILE_H

#define AFILE_H

命名空间B {

CAFile类

{...

};

};

#万一

Mat*_*Mat 10

如果某些代码(直接或间接)需要同时查看A :: CAFile和B :: CAfile,您的警卫需要有所不同.

包含保护由预处理器处理,它对所有类都不了解(更不用说名称空间了).如果在处理c ++文件时包含这两个文件,并且它们具有相同的标头保护,则只有一个声明将保留在编译器将看到的预处理源中.

看看像Boost文件这样的东西,他们有一些标题守卫的约定(如果我没记错的话).


sha*_*oth 5

包含保护仅影响预处理器,预处理器不知道C++并完全忽略命名空间.因此,警卫应该是文件的唯一,而不是命名空间.