2
美好的一天!从系统头保护世界其他地方
我目前正在寻找“该”的方式来保护程序的其余部分从系统相关的头文件。由于系统头本身的依赖关系,通常不能将其放入详细的名称空间。我的考虑是现在在详细命名空间中使用extern声明的变量,并在包含系统头文件的.cpp文件中给它们一个值。这似乎是一个完美的解决方案,因为外部世界甚至不知道大部分内容,并且您需要的所有内容都可以打包在详细的命名空间中。但是有一个问题:你不能用extern常量初始化枚举常量。
我的问题:是否有任何方法使用枚举/结构类型与extern变量?或者是否有更好的方法来保护程序免受系统头文件的影响?
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"
};
维持依赖关系,是的。但是像这样的标题包含了其他程序中不需要的东西。 (例如,名为“max”的宏,不能使用std :: max) - 但是好的,我可以重新映射所有值。如果没有人有更好的主意,我会将其标记为答案。 –
cooky451
2012-02-28 18:12:18
虽然记住'max'可以在包含windows.h之前用'#define NOMINMAX'解决。您还可以使用“精益和平均”定义。 – 2012-02-28 18:17:55