Уменьшите количество параметров шаблона

#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 }