我有一个类来包装字符串文字并在编译时计算大小。
构造函数如下所示:
template< std::size_t N >
Literal( const char (&literal)[N] );
// used like this
Literal greet( "Hello World!" );
printf( "%s, length: %d", greet.c_str(), greet.size() );
但是代码有问题。下面的代码可以编译,我想让它出错。
char broke[] = { 'a', 'b', 'c' };
Literal l( broke );
有没有办法限制构造函数,使其只接受 c 字符串文字?首选编译时检测,但如果没有更好的方法,运行时也可以接受。
最佳答案
有一种方法可以强制使用字符串文字参数:创建一个用户定义的文字运算符。您可以使运算符 constexpr
在编译时获取大小:
constexpr Literal operator "" _suffix(char const* str, size_t len) {
return Literal(chars, len);
}
目前我不知道有任何编译器实现了这个特性。
关于c++ - 将传递的参数限制为字符串文字,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/38762420/