gpt4 book ai didi

c++ - 基于字符串的用户定义文字可以是强类型的吗?

转载 作者:可可西里 更新时间:2023-11-01 16:02:35 39 4
gpt4 key购买 nike

C++ 中新的用户定义字面量概念提出了字符串字面量的一些非常有趣的用途,例如:

"Goodbye %s world"_fmt("cruel");
"Goodbye %s world"_fmt(123); // Error: arg 1 must be convertible to const char*

R"(point = \((\d+), (\d+)\))"_re; // Builds DFA at compile-time.

typedef table<
column<"CustId"_name , std::string>,
column<"FirstName"_name, std::string>,
column<"LastName"_name , std::string>,
column<"DOB"_name , date >
> Customer;

但是,当我在 gcc 中构建这些类型的结构时,例如:

template <char... Chars> Name<Chars...> operator "" _name() {
return Name<Chars...>();
}

auto a = 123_name; // OK
auto b = "abc"_name; // Error

我收到以下错误:

…unable to find string literal operator ‘operator"" _name’ with ‘const char [4]’, ‘long unsigned int’ arguments

通过阅读,我猜测可变参数模板形式不适用于从字符串文字派生的 UDL。

  1. 是否确实存在使用可变参数模板形式无法解析字符串文字的情况?
  2. 如果是这样,是否有人了解为什么将这种有用的 UDL 形式排除在标准之外?

最佳答案

你是对的。字符串文字不能与可变参数模板形式一起使用 (§2.14.8/5):

If L is a user-defined-string-literal, let str be the literal without its ud-suffix and let len be the number of code units in str (i.e., its length excluding the terminating null character). The literal L is treated as a call of the form

operator "" X (str, len)

我翻阅了提案文件(我能找到的最新文件是 N2750),但找不到关于不允许使用可变参数模板表单的解释。

关于c++ - 基于字符串的用户定义文字可以是强类型的吗?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/10880507/

39 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com