c++ - 保护世界其他地方免受系统 header 的影响

标签 c++ header system

美好的一天!

我目前正在寻找保护程序其余部分免受系统相关头文件影响的“方法”。由于系统 header 本身的依赖性,人们通常无法将其放在 detail 命名空间中。我现在的考虑是在 detail 命名空间中使用 extern 声明的变量,并在包含系统头文件的 .cpp 文件中为它们赋值。这似乎是完美的解决方案,因为外部世界甚至不知道大部分内容,而您需要的所有内容都可以打包在 detail 命名空间中。但是有一个问题:不能用外部常量初始化枚举常量。

我的问题:有没有办法将枚举/结构类型与外部变量一起使用?或者是否有更好的方法来保护程序免受系统 header 的影响?

VS11 说:

namespace detail
{
  extern const int value;
}

const auto val = detail::value; // ok

enum class my_enum
{
  value = detail::value, // "expression must have a constant value"
};

struct my_struct
{
  static const auto value = detail::value; // "constant value is not known"
};

最佳答案

我不确定您要实现的目标是什么,但是如果您打算重新定义新常量以使其具有与旧常量完全相同的值,则系统 header 的依赖性将保持不变。

我能想到的消除依赖的第一种方法是在你自己的包装器中重新定义系统头功能,为每个功能使用你自己的常量(如果你想要它们可以是枚举,或者普通常量 在 header 本身中定义)。然后在实现文件中,包含系统 header 并将常量中的值重新映射到系统 header 中的值。

关于c++ - 保护世界其他地方免受系统 header 的影响,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/9487136/

相关文章:

c++ - 对具有按引用传递参数的函数使用递归?

c++ - 对 C++ #include 感到困惑

r - Knit 卡在 system() 调用上

c - 在 C 中,我编写了一个程序来使用 system() 调用一个 exe。 exe 要求用户输入。如何让我的程序提供输入?

c++ - 来自函数参数的容器的 decltype

c++ - 存储函数指针的正确语法

c++ - QMediaPlaylist 支持的格式

php 头文件传输损坏

javascript - 向下滚动时使 div 移出屏幕(顶部)

perl - String::ShellQuote: 我什么时候需要 `shell_quote` ?