首页 > 解决方案 > 字符串化模板参数

问题描述

我正在尝试将代码从这个问题Unpack parameter pack 的答案扩展到字符串视图

我想使用自定义编写的 constexpr_string 类型,而不是对 char-only 类型进行字符串化:

#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. 提前谢谢了!

标签: c++c++14

解决方案


推荐阅读