c++ - 字符串化模板参数
问题描述
我正在尝试将代码从这个问题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
. 提前谢谢了!
解决方案
推荐阅读
- php - 来自 angularjs 的 iframe src 不起作用
- javascript - 递归承诺会导致堆栈溢出?
- dart - 为什么使用列表
当堆栈返回 _GrowableList - meteor - 流星不在网页中添加和显示任务,它只是闪烁和故障(创建待办事项列表以添加和删除任务)
- android - 如何解决“javax.net.ssl.SSLHandshakeException:java.security.cert.CertPathValidatorException:找不到证书路径的信任锚。”
- git - 如何将两个旧提交合并为一个?
- visual-studio - MSB4067:元素下方的元素 <#text>
无法识别 - python - Python Popen 无法识别命令行开关
- php - WordPress wp-admin 仪表板
- c# - 将值动态添加到 MS 访问数据库并使用变量检索它们