如何用C++模板推导一个编译时字符串的大小?
我正在尝试使用clang++从扩展模板代码。这是我想到的 constexpr unsigned int需要\u inRangeunsigned int i,unsigned int len{ 返回i>=len?抛出i:i; } 类StrWrap { 无符号大小; char*const begin; 公众: 模板如何用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{ 返回需要在
注意:从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