【发布时间】:2012-02-29 02:03:23
【问题描述】:
美好的一天!
我目前正在寻找保护程序其余部分免受系统相关头文件影响的“方法”。由于系统标头本身的依赖性,通常无法将其放在详细名称空间中。我现在的考虑是在详细命名空间中使用 extern 声明的变量,并在包含系统头文件的 .cpp 文件中给它们一个值。这似乎是一个完美的解决方案,因为外部世界甚至不知道大部分内容,您需要的所有内容都可以打包在一个详细的命名空间中。但是有一个问题:不能用外部常量初始化枚举常量。
我的问题:有没有办法将枚举/结构类型与外部变量一起使用?还是有更好的方法来保护程序免受系统头文件的影响?
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"
};
【问题讨论】: