Если у нас есть тип перечисления:
enum E {
E1,
E2,
// ...
};
и на основе E
шаблон класса:
template <E T>
class C { /* ... */ };
Есть ли способ использовать объявленную переменную типа E
в качестве аргумента шаблона?
Пример кода:
E example_type = E1;
C<example_type> example_class;
если переменная constexpr
, да.
Не могли бы вы пояснить свой пример кода? В настоящее время неясно, чего вы хотите, и использование вами C
не имеет смысла.
По какой причине вы не используете C<E1>
?
В зависимости от строки мне нужно вернуть тип перечисления. Я хочу использовать этот тип непосредственно в другом методе.
Для целочисленных (которым является перечисление) и арифметических типов аргумент шаблона, предоставляемый во время создания экземпляра, должен быть константным выражением. Например:
enum E {
E1,
E2,
};
template <E enum_val>
class Foo {
};
int main() {
constexpr E var = E1;
const E var2 = E2;
Foo<var> foo;
Foo<var2> foo2;
E var3 = E2;
Foo<var3> foo3; // error: the value of ‘var3’ is not usable in a constant expression
}
Возможно это ответит на ваш вопрос? Он использует параметр функции вместо локальной/глобальной переменной.