Добрый день!
В настоящее время я ищу "способ" защитить остальную часть программы от системных заголовочных файлов.Часто невозможно просто поместить его в детальное пространство имен из-за зависимостей самого системного заголовка.Теперь я подумал об использовании объявленных переменных extern в подробном пространстве имен и присвоении им значения в файле .cpp, который включает системные заголовки.Это казалось идеальным решением, так как внешний мир даже не знает большинство вещей, и все, что вам нужно, может быть упаковано в пространство имен деталей.Но есть одна проблема: Вы не можете инициализировать константы enum внешними константами.
Мой вопрос: есть ли способ использовать типы enum / struct с внешними переменными?Или есть даже лучший способ защитить программу от системных заголовков?
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"
};