将包含平台 header 的范围限制为只包含它的 header 文件?
Limit scope of included platform header to to just the header file including it?
我正在处理一个 C++ 库项目。我需要包含特定于平台的 header 才能访问某些 #defines
。问题是,我只希望平台的 header 在我的 header 中可见。对于包括我的 header 在内的那些人,我不希望他们看到额外的符号。
我考虑过使用 C++ 命名空间来 contain/control 符号可见性,但它不起作用(同意,#define statements within a namespace). And as far as I know, options like --exclude-libs,all
仅在 link 时适用于库符号,而不适用header 个符号。
我也想过使用平台 header 中我需要的符号,然后取消定义它包含的所有符号。但是我不知道如何通配符 #undef platform_header.h/*
.
Including a header file into a header file without exposing it's content to the includer 也有类似的问题。他这样做是为了限制 IDE auto-completion,由于不同的要求,这会产生与我需要的不同的答案。
如何将包含的平台 header 的可见性仅限于我的图书馆 header?
一般来说,您无法避免宏名称污染。您可以使用的唯一工具是 compiler firewall,用于在实现文件中包含 C(或只是麻烦的)头文件。然后,您可以在头文件中为其提供自己的 C++ 接口。
我正在处理一个 C++ 库项目。我需要包含特定于平台的 header 才能访问某些 #defines
。问题是,我只希望平台的 header 在我的 header 中可见。对于包括我的 header 在内的那些人,我不希望他们看到额外的符号。
我考虑过使用 C++ 命名空间来 contain/control 符号可见性,但它不起作用(同意,#define statements within a namespace). And as far as I know, options like --exclude-libs,all
仅在 link 时适用于库符号,而不适用header 个符号。
我也想过使用平台 header 中我需要的符号,然后取消定义它包含的所有符号。但是我不知道如何通配符 #undef platform_header.h/*
.
Including a header file into a header file without exposing it's content to the includer 也有类似的问题。他这样做是为了限制 IDE auto-completion,由于不同的要求,这会产生与我需要的不同的答案。
如何将包含的平台 header 的可见性仅限于我的图书馆 header?
一般来说,您无法避免宏名称污染。您可以使用的唯一工具是 compiler firewall,用于在实现文件中包含 C(或只是麻烦的)头文件。然后,您可以在头文件中为其提供自己的 C++ 接口。