我有一个包装字符串文字并在编译时计算大小的类。

构造函数如下所示:

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/

10-11 22:42
查看更多