如何用C++模板推导一个编译时字符串的大小?

如何用C++模板推导一个编译时字符串的大小?,c++,c++11,templates,c++14,c++17,C++,C++11,Templates,C++14,C++17,我正在尝试使用clang++从扩展模板代码。这是我想到的 constexpr unsigned int需要\u inRangeunsigned int i,unsigned int len{ 返回i>=len?抛出i:i; } 类StrWrap { 无符号大小; char*const begin; 公众: 模板 constexpr StrWrap const char&arr[N]:开始,大小为-1{ 静态断言N>=1,不是字符串文字; } constexpr字符运算符[]无符号i{ 返回需要在

我正在尝试使用clang++从扩展模板代码。这是我想到的

constexpr unsigned int需要\u inRangeunsigned int i,unsigned int len{ 返回i>=len?抛出i:i; } 类StrWrap { 无符号大小; char*const begin; 公众: 模板 constexpr StrWrap const char&arr[N]:开始,大小为-1{ 静态断言N>=1,不是字符串文字; } constexpr字符运算符[]无符号i{ 返回需要在范围、大小、开始[i]中输入; } constexpr运算符const char*{ 返回开始; } constexpr无符号大小{ 返回大小; } }; constexpr unsigned count StrWrap str,char c,unsigned i=0,unsigned ans=0 { 返回i==str.size?ans: str[i]==c?countstr,c,i+1,ans+1: countstr,c,i+1,ans; } int main argc,字符常量*argv[] { 静态断言countdude,'d'==2,d!=2; 返回0; } 但是,博客文章中的代码不是编译的:

/usr/bin/clang++-Xclang-ast print-fsyntax-only-test_debugger2.cpp>main.exe

如何修复该博客文章中的模板扩展

这个

char*const begin; 是指向char的常量指针指针指针是常量,而不是它所指向的对象。这个

常量字符和arr[N] 是对const char类型的N个元素的数组的引用。数组的元素是常量。在常量元素数组中不能有指向非常量点的指针,至少不能没有暴力。您需要将指针设置为常量字符*或将数组设置为非常量元素数组

我猜你是想写信

const char*begin_u2;;
注意:从C++17开始,您可以直接使用…

谢谢!成功了。博客上的那个家伙写的是char*const begin;而不是char const*begin@用户好吧,那么来自博客的代码是错误的;
test_debugger2.cpp:12:48: error: cannot initialize a member subobject of type 'char *const' with an lvalue of type 'const char [5]'
    constexpr StrWrap( const char(&arr)[N] ) : begin_(arr), size_(N - 1) {
                                               ^      ~~~
test_debugger2.cpp:38:26: note: in instantiation of function template specialization 'StrWrap::StrWrap<5>' requested here
    static_assert( count("dude", 'd') == 2, "d != 2" );
                         ^
test_debugger2.cpp:38:20: error: static_assert expression is not an integral constant expression
    static_assert( count("dude", 'd') == 2, "d != 2" );
                   ^~~~~~~~~~~~~~~~~~~~~~~
2 errors generated.
clang version 8.0.1 (tags/RELEASE_801/final)
Target: x86_64-unknown-windows-cygnus
Thread model: posix
InstalledDir: /usr/bin