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