无法在模板参数中定义字符串文本
Can't define string literal in template arguments
>我正在尝试在函数的模板参数中定义一个新的字符串文字。
template<const char* msg>
const char* function()
{
return msg;
}
int main()
{
function<"why doesnt this work?">()
return 0;
}
但是,它不起作用。我必须做这样的事情
constexpr char msg[] = "this is ugly and annoying";
int main()
{
function<msg>()
return 0;
}
这是非常不方便的。我正在尝试创建一个类似 printf 的功能,但这是一个主要障碍。如果我去一个假字符串(例如tuple('a','b','c'...
(,然后它使用于扩展用户定义格式的接口以及一般代码更难、更丑陋。(%d%,%f%,%e% 是默认格式,%myformat% 是用户定义的示例。由于 % 终止符,它们可以随心所欲地长(
我怎样才能吃我的蛋糕并吃它(或至少尽可能靠近它(?
这是C++标准所不允许的,因为编译器对"折叠"相同字符串的规则究竟会是什么样子存在问题。
在 c++20 中,我们将有演绎指南,以及用户提供的类类型的非类型模板参数。 您将采用由"some string"
初始化的ct_string
,而不是char const*
,该将包含其字符串数据并使用<=>
来确定唯一性。
在那之前,你不走运。
请注意,对于使用的每个缓冲区msg
,而不是每个字符串值,您将获得不同的function<msg>()
。
相关文章:
- 我无法在 qt 的C++代码中定义字符串
- 无法在模板参数中定义字符串文本
- 如何使用运算符>>在自定义字符串中输入多个单词?
- llvm,通过 C++ API 定义字符串和数组
- 字符串流中的自定义字符串输入
- 如何在Visual Studio Code tasks.json中定义C++字符串宏?
- C++ 使用链表的自定义字符串类中的重载 + 运算符
- 如何在 C++ 中安全地为 char *array 重新分配内存(它适用于自定义字符串类)
- 我可以在"setDefaultButton"中使用我自己的用户定义字符串吗
- 在编译器选项上定义字符串
- Xcode 4.5.2 libc++ std::bad_cast 实现自定义(字符串)流时
- Visual C Inliner组装程序并定义字符串
- 自定义字符串类实现建议
- 自定义字符串类中的常量字符*差异
- 如何在C++中重新定义字符串的 = 运算符
- 定义字符串时C++许多错误
- 如何在C++头文件中定义字符串参数-用Swift桥接
- 如何用C++递归地从二进制文件中读取自定义字符串
- 自定义字符串排序
- 带有自定义字符串比较器的字符串的priority_queue的C++向量