#c #templates #constexpr
Вопрос:
Я хотел бы сохранить некоторые объекты, которые я знаю во время компиляции , в классе и сохранить их constexpr
, чтобы продолжить работу во время компиляции. Однако то, как я храню эти значения в a struct
, кажется неудовлетворительным:
template lt;class T1, T1 _x1, class T2, T2 _x2gt; struct A { constexpr static T1 x1 = _x1; constexpr static T1 x2 = _x2; }
Хотя приведенный выше код достигает моей цели, кажется излишне сложным явно указывать как тип, так и значение, чтобы сохранить constexpr
значение в шаблонном классе.
Есть ли лучший/более элегантный способ достичь этого? В частности, было бы желательно, чтобы мне не нужно было сначала выводить тип снова.
Комментарии:
1. Я думаю, вы можете просто дать
A
constexpr
конструктор.2.
_x1
и_x2
являются частью шаблона класса. Вам не нужны переменные для них, вы можете просто использовать их в классе, используя их имя, напримерvoid cool_func() { std::cout lt;lt; "_x1: " lt;lt; _x1; }
3. @CoryKramer спасибо! исправлена опечатка
Ответ №1:
В C 17 у вас могут быть параметры автоматического шаблона
template lt;auto _x1, auto _x2gt; struct A { // Use _x1 and _x2 directly }