簡體   English   中英

我可以“隱藏”在 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

有什么辦法我仍然可以在頭文件中使用 create 某些東西,並且不讓它泄漏到我項目的所有其他文件中?

有什么辦法我仍然可以在頭文件中使用 create 某些東西,並且不讓它泄漏到我項目的所有其他文件中?

不。包含的文件完全包含在內。 如果包含的文件包含某些內容,則將包含該內容。 簡單的解決方案是不要將某些內容放入您不希望它包含的標題中。


 using uint64_t = Bitboard;

但是由於這是一個頭文件,所以現在到處都定義了Bitboard

那並沒有定義Bitboard 這定義了uint64_t - 這是為全局命名空間中的語言實現保留的標識符。


項目不小, Bitboard也不是很獨特的標識符

除了上面提到的不定義的解決方案外,一種解決方法是在命名空間內定義名稱,以提高其唯一性。

你能做的最好的事情就是使用丑陋的 C #define

#pragma once

#define Bitboard uint64_t

extern Bitboard a;
void foo(Bitboard);

...

#undef Bitboard

將其移動到一個新的頭文件中,該文件將僅包含在您希望了解該秘密的源文件中。

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM