Я пытаюсь расширить код из ответа на этот вопрос Распаковать пакет параметров в виде строки .
Вместо строковых типов, состоящих только из символов, я хотел бы использовать тип constexpr_string, написанный на заказ:
#include <array>
#include <iostream>
class constexpr_string {
public:
template <std::size_t N>
constexpr constexpr_string(const char (&s)[N]) : string_{s}, size_{N - 1} {}
constexpr constexpr_string() = default;
constexpr char const operator[](std::size_t n) const { return string_[n]; }
constexpr std::size_t GetSize() { return size_; }
private:
char const *string_{nullptr};
std::size_t size_{0};
};
template <constexpr_string... strings> constexpr auto stringify() {
std::array<constexpr_string, sizeof...(strings)> array = {strings...};
return array;
}
int main() {
static constexpr auto s = stringify<"abc", "def", "fgh">();
for (auto &i : s) {
std::cout << i << std::endl;
}
return 0;
}
Когда я компилирую, я получаю:
main.cpp: 18: 31: ошибка: «class constexpr_string» не является допустимым типом для параметра типа, не являющегося типом
шаблон constexpr auto stringify ()
Такое вообще возможно? Я компилирую с g++ (Ubuntu 7.3.0-27ubuntu1~18.04) 7.3.0
. Большое спасибо заранее!