c++ - 将参数包解压到字符串 View 中

标签 c++ variadic-templates c++17 string-view

可以将 char 类型的值模板参数包解压为(编译时)字符串。 如何将 string_view 获取到该字符串中?

我想做的事情:

int main()
    {
    constexpr auto s = stringify<'a', 'b', 'c'>();
    constexpr std::string_view sv{ s.begin(), s.size() };
    return 0;
    }

尝试:

template<char ... chars>
constexpr auto stringify()
    {
    std::array<char, sizeof...(chars)> array = { chars... };
    return array;
    }

错误:

15 : <source>:15:30: error: constexpr variable 'sv' must be initialized by a constant expression
constexpr std::string_view sv{ s.begin(), s.size() };
                         ^~~~~~~~~~~~~~~~~~~~~~~~~
15 : <source>:15:30: note: pointer to subobject of 's' is not a constant expression

有没有办法在 main 函数中获取行为?

最佳答案

它无法像 constexpr 一样工作,因为 s 数组位于堆栈上,所以它的地址在编译时是未知的。要修复,您可以将 s 声明为 static

Check this solution in online compiler

关于c++ - 将参数包解压到字符串 View 中,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/47126667/

相关文章:

c++ - 在其他模块中通过 cPar 更改模型参数

c++ - 如何为单线程 GUI 应用程序创建额外的工作线程?

c++ - 为模板参数中的每种类型声明和实现重载虚函数

c++ - 无法使用各种 lambda 表达式初始化 std::variant

c++ - const unique_ptr 的propagate_const

c++ - 引用和数组索引之间有什么区别?

c++ - 是否可能/建议将 vector 存储在结构中? C++

c++ - 如何在可变参数模板类的 lambda 中使用可变参数

c++ - int a[] { (函数调用(a1, a2), 0)...}; (无效(a));这个语法的作用/含义是什么?

c++ - 通用模板模板参数