用户文本中有多个参数
Multiple arguments in user-literals
我在cppreference.com上找到了这个例子:
// used as conversion
inline constexpr long double operator"" _deg ( long double deg )
{
return deg*3.141592/180;
}
...
double x = 90.0_deg; // x = 1.570796
但现在我想知道,如果我能给这个函数多个参数的话。这里只有deg
。我的意思是:0.3_arg1_21arg2
此功能不存在,但您可以模仿它!
例如,您可以使用以下语法:
auto result = 0.3_arg1/21_arg2;
/
可以被您选择的任何重载运算符所取代——也许,
是一个不错的选择,但要注意它的优先级低。我会坚持使用具有高优先级的东西,以确保它被解析为一个文本(即使它不是)。
然后,为了实现这一点,你需要实现这样的东西(只在我的大脑中编译,所以不能保证正确性):
struct value_proxy_lhs { double d; };
struct value_proxy_rhs { double d; };
struct final_value { double a; double b; };
inline constexpr value_proxy_lhs operator ""_arg1(double d) { return {d}; }
inline constexpr value_proxy_rhs operator ""_arg2(double d) { return {d}; }
inline constexpr final_value operator /(value_proxy_lhs lhs, value_proxy_rhs rhs) {
return {lhs.d, rhs.d};
}
在一个合适的应用程序中,你可能会尽可能多地向用户隐藏value_proxy_*
类,这样他们就不会意外地产生不完整的值不幸的是,我认为没有办法完全避免这种情况。例如,据我所知,该语言根本没有提供禁止像auto x{1_arg1};
这样的东西进行编译的方法。使复制构造函数private
(和final_value
成为friend
)可能会使代理类成为非POD,从而禁止将它们用作constexpr
(AFAIR)。
作为一个现实世界的应用程序,我可以想象一个日期"字面":
auto date = 2013_yy/12_mm/07_dd;
不,没有这样的功能。很抱歉是坏消息的传递者!
相关文章:
- 读取大文件(>2GB)(文本文件包含以太网数据)并通过不同参数随机访问数据的最佳方法是什么?
- 无法在模板参数中定义字符串文本
- C++20字符串文本模板参数工作示例
- 将 QAction 的 QString 文本作为参数传递
- (C++) 字符串文本与参数列表不匹配
- 如何使输入文本文件成为构造函数参数?c++
- 如何在不使用文件扩展名的情况下使用命令行参数打开C++中的文本文件?
- 在现代C++中是否可以将字符串文本作为参数传递给C++模板?
- 标准是否阻止在可变参数模板中使用足够小的文本值缩小文本转换范围
- 将传递的参数限制为非临时字符串文本
- C++编译器如何在引用参数中实际传递文本常量?
- std::string 参数是如何从原始字符数组文本传递的
- 将文本字符串作为常量字符 * 参数传递会导致代码分析器错误
- 向 const 字符串参数发送 0 int 文本时的访问冲突
- 命令行参数读取文本文件
- 创建一个接受 2 个输入参数的文本运算符函数
- C++ 命令行参数不从文本文件中打印出值
- 如何使用 c++ 逐行处理文本文件并将其参数拆分为变量?
- 将文本文件而不是用户输入作为命令行参数传递
- 双参数构造函数的用户定义文本