c++ - 将传递的参数限制为字符串文字

标签 c++ c++11 string-literals

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

构造函数如下所示:

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/

相关文章:

c++ - 使用 std::enable_if 作为模板时的默认模板参数。 param.: 为什么可以使用两个仅在 enable_if 参数上不同的模板函数?

c - 一种在 C 中自动将字符串文字转换为 `unsigned char*` 的方法?

C++ 编译时多态性

C++、count_if 和 equals

c++ - 在 C++ 中复制现有的 cpp 文件

c - 奇怪的 gcc 错误杂散/缺少终止“C 中的字符

C - 字符数组和字符指针

java - 设计方法错误代码的最佳做法是什么?

c++ - "friend struct A;"和 "friend A;"语法有什么区别?

c++ - "warning: control reaches end of non-void function [-Wreturn-type]"是否有合理的修复?