Хотите встроить параметр шаблона const char * const в структуру для использования в качестве параметра шаблона в другой функции - PullRequest
1 голос
/ 06 марта 2020

Я хочу "встроить" const char *const в структуру.

  template <const char *const CharArray>
  struct ModName {
    static constexpr int index = Index<S<CharArray>, Tuple>::value;
    static constexpr const char *const name = CharArray; // <--- this is causing me trouble
    using Type = typename ModIndex<index, typename T<index + 1>::Type>::Type;
    using TypePtr = std::unique_ptr<Type>;
  };

index, Type и TypePtr все отлично работает в контексте, который я хочу использовать ... но я также хотел бы использовать name в качестве параметра шаблона в другой шаблонной функции, например:

  template <const char *const CharArray,
            class ModDef = ModName<CharArray>>
  typename ModDef::TypePtr BuildModule() {
    return Builder<ModDef>::Build();
  }

  template <class ModDef>
  struct Builder {
    static typename ModDef::TypePtr Build() {
          CheckIfAlreadyBuilt<ModDef::name>(false); // <--- Here I'm getting compilation error
    }
  };

  template <const char *const CharArray>
  static void CheckIfAlreadyBuilt(bool status) {
    ...
  }

Ошибка: ’...::name’ is not a valid template argument because ‘...::name’ is a variable, not the address of a variable

Теперь, Я знаю, что мог бы просто распространить исходный CharArray как в шаблонной структуре Builder и решить это, но я хочу знать, есть ли более «элегантное» решение и «внедрить» все, что я хочу в ModName. Я уже пробовал разные вещи, такие как

... static constexpr char[] name = CharArray;

, но я получаю разные ошибки компиляции

...