У меня есть смесь классов C ++, некоторые из которых хранят переменную состояния 0..9 как целое число, другие используют '0' ... '9'.В настоящее время я делаю:
enum { kOne = '1' };
class StoresValueAsInt {
static int value; // contains 0 ... 9
};
class StoresValueAsChar {
static char value; // contains '0' ... '9'
};
class StoresValueAsChar {
static char value;
};
template <typename X>
isOne() { return X::value == kOne; }
Это позволяет мне написать код ошибки isOne<StoresValueAsInt::value>()
.Вместо этого я хотел бы, чтобы компилятор жаловался на это неправильное использование.Я попробовал следующее:
enum ValueInt {
kOne = 1
};
enum ValueChar {
kOne = '1'
};
class StoresValueAsInt {
static ValueInt value;
};
class StoresValueAsChar {
static ValueChar value;
};
class StoresValueAsChar2 {
static ValueChar value;
};
Однако это не работает, потому что kOne виден на уровне пространства имен, и, следовательно, имеет конфликтующие объявления kOne.не объявлены ли перечисления в пространстве имен?Или лучший подход здесь?
обновлено: Добавлено то, что я сейчас делаю;в надежде уточнить мой вариант использования.