【问题标题】:Including STL without littering global scope包括 STL 而不会乱扔全局范围
【发布时间】:2020-10-14 04:48:20
【问题描述】:

有没有办法包含 STL 而无需在全局范围内定义诸如 ::size_t 之类的东西? _security_init_cookie 之类的实现项对我来说很好,因为它们的标识符是保留的。

vcruntime.h 总是包含在内,这让我很困扰。

【问题讨论】:

  • 你能提供更多细节吗?您是否试图避免在任何地方使用std::? FWIW,恕我直言,避免输入 5 个额外字符是不值得的。
  • @NathanOliver 相反。我想在任何地方使用std::
  • 哦,所以你想摆脱标题可能放入全局空间的名称。不知道你可以在那里做什么
  • 我希望有人知道我可以定义一个魔术宏,以便将实现细节严格留在实现中,最终用户无法访问。
  • 我猜没有这样的宏。但是你可以看看你包含的头文件的源代码来确定。

标签: c++ visual-c++ msvcrt


【解决方案1】:

我认为这样做根本不安全。

有向后兼容性需要在全局空间中有东西。如果您更改这些全局事物的签名,则会出现链接时间问题。 要走的路是将全局空间留给语言和库实现,并将你的东西放入命名空间。

如果你 fork STL,你将不得不维护并与每个版本同步。

vcruntime.h 不是来自 STL,而是与 Windows 相关的东西。

不过你可以使用std::size_t

#include <cstddef>
std::size_t i = 0;

但是::size_t 无论如何都会在那里。

【讨论】:

    猜你喜欢
    • 2018-08-21
    • 1970-01-01
    • 2019-08-08
    • 2014-07-24
    • 2010-11-16
    • 2011-03-17
    • 2014-02-22
    • 1970-01-01
    • 2014-04-11
    相关资源
    最近更新 更多