STL 是否为其标头指定标头保护?
Does the STL specify the header guards for its headers?
我想在我的标题中使用std::string
以及使用const char *
的库函数提供一些内联便利函数,但我不想包含<string>
。我想与#ifdef
核实是否包含<string>
,如果是这种情况,则提供便利功能。
问:对于所有 STL 实现,STL 标头中的标头保护名称是否相同?在Visual Studio 2010中,<string>
的标头保护是_STRING_
。
这是一个坏主意™。
通常,您不能也不应该依赖编译器/库1的实现细节。最重要的是,正如Fire Lancer在评论中所说,"包含基于顺序有不同的效果会让人们感到困惑">,并添加到库的wtf/行中。
您可以(应该?(做的是记录一个宏供用户定义,以便启用std::string
功能:
#ifdef MY_LIBRARY_ENABLE_STRING_FUNCTIONS
void print(std::string message);
#endif // MY_LIBRARY_ENABLE_STRING_FUNCTIONS
如果用户需要它们,他们必须:
#define MY_LIBRARY_ENABLE_STRING_FUNCTIONS
#include <my_library>
1(C++17 具有__has_include(<filename>)
宏(感谢 acraig5075 向我学习这一点(,这无济于事,因为它返回包含是否可用,如果已包含,则不返回。
最可靠的检查方法可能是使用sfinae技术。
话虽如此,不要这样做,当您想要区分标头是否已包含或包含顺序时,一切都会尖叫反模式。
相关文章:
- lock_guard是否保护返回值
- 公共/私有/受保护是否会更改内存中结构的排列?
- 检查nullptr是否100%保护内存布局不受segfault影响
- c++ 编译器是否保护常量内存地址免受任何更改?
- 我们是否应该转向新的自我分配保护方式?
- STL 是否为其标头指定标头保护?
- 在 C++17 中,是否未定义使用无锁原子学保护从信号处理程序传递的数据?
- 如何在Windows上检查EXE是否具有/GS安全保护
- 如何检查 ACL 是否受到保护
- 是否可以基于私有/受保护成员分配类枚举?
- 是否可以解密受 cenc 保护的 MPEG-DASH 文件?
- 锁定的互斥锁是否保护condition_variable和数据?
- Windows 10 是否保护您不访问其他程序正在使用的内存?
- 如何检查是否定义了标头保护
- C++ 我是否需要为嵌套类定义标头保护
- 是否可以使用 static_cast 颠覆受保护成员访问检查?
- 如果目标文件已经具有标头保护,我们是否应该用 #ifndef 来保护 #include
- Boost单元测试夹具继承测试类,是否可以访问受保护的方法
- 我是否需要通过锁来保护对 Boost MultiIndex 索引(索引本身)的访问?
- C++是否可以从同级第二个派生对象访问第一个派生对象的受保护基础数据成员?