我可以 "hide" 在 C++ 的头文件中定义的任何东西吗
Can I "hide" anything defined in a header file in C++
假设我有一个头文件test.h
。
#pragma once
extern uint64_t a;
void foo( uint64_t );
在我的例子中,uint64_t
用于表示 Bitboard 作为我的国际象棋引擎的一部分
test.h
自然我会到处使用 uint64_t
。我想为 uint64_t
创建一个类型别名,如 Bitboard
。
所以我做了
using uint64_t = Bitboard;
但是由于这是一个头文件,所以现在到处都定义了Bitboard
,因为这个头文件几乎被项目的所有其他文件所使用。
问题是我只想在test.h
.
中使用这个别名
问题
项目不小,而且Bitboard
不是一个非常独特的标识符,我觉得像这样的全局别名可以引起一些冲突,因此我想严格保持在 test.h
.
以内
有没有什么方法可以让我仍然在头文件中创建一些东西,而不让它泄漏到我项目的所有其他文件中?
Is there any way I can still use create something in a header file, and not have it leak into all the other files of my project?
没有。包含的文件是完全包含的。如果包含的文件包含某些内容,则将包含该内容。简单的解决方案是不要将您不希望它包含的内容放入 header。
using uint64_t = Bitboard;
But since this is a header file, Bitboard is now defined everywhere
这没有定义 Bitboard
。这定义了 uint64_t
- 这是为全局命名空间中的语言实现保留的标识符。
The project isn't small, and Bitboard
isn't a very unique identifier
除了上面提到的不定义的解决方案外,还有一种解决方法是在命名空间内定义名称,以提高其唯一性。
将其移动到一个新的头文件中,该文件将仅包含在您希望保密的源文件中。
最好你能做的就是使用丑陋的 C #define
#pragma once
#define Bitboard uint64_t
extern Bitboard a;
void foo(Bitboard);
...
#undef Bitboard
假设我有一个头文件test.h
。
#pragma once
extern uint64_t a;
void foo( uint64_t );
在我的例子中,uint64_t
用于表示 Bitboard 作为我的国际象棋引擎的一部分
test.h
自然我会到处使用 uint64_t
。我想为 uint64_t
创建一个类型别名,如 Bitboard
。
所以我做了
using uint64_t = Bitboard;
但是由于这是一个头文件,所以现在到处都定义了Bitboard
,因为这个头文件几乎被项目的所有其他文件所使用。
问题是我只想在test.h
.
问题
项目不小,而且Bitboard
不是一个非常独特的标识符,我觉得像这样的全局别名可以引起一些冲突,因此我想严格保持在 test.h
.
有没有什么方法可以让我仍然在头文件中创建一些东西,而不让它泄漏到我项目的所有其他文件中?
Is there any way I can still use create something in a header file, and not have it leak into all the other files of my project?
没有。包含的文件是完全包含的。如果包含的文件包含某些内容,则将包含该内容。简单的解决方案是不要将您不希望它包含的内容放入 header。
using uint64_t = Bitboard;
But since this is a header file, Bitboard is now defined everywhere
这没有定义 Bitboard
。这定义了 uint64_t
- 这是为全局命名空间中的语言实现保留的标识符。
The project isn't small, and
Bitboard
isn't a very unique identifier
除了上面提到的不定义的解决方案外,还有一种解决方法是在命名空间内定义名称,以提高其唯一性。
将其移动到一个新的头文件中,该文件将仅包含在您希望保密的源文件中。
最好你能做的就是使用丑陋的 C #define
#pragma once
#define Bitboard uint64_t
extern Bitboard a;
void foo(Bitboard);
...
#undef Bitboard