我有一个包装字符串文字并在编译时计算大小的类。
构造函数如下所示:
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/