是否有任何建议来统一函数类型限定符并简化可恶的函数类型?
Is there any proposal to uniformize function type qualifiers and simplify abominable function types?
在处理基于函数类型匹配的模板时,可恶的函数类型组合可能是一个真正的痛苦(参见std::is_function(。
包括常量、易失性、&、&&、noexcept (加上可变参数支持(在内的杂项四元可能会导致大量的模板专用化。
但是,noexcept
说明符允许使用布尔表达式noexcept(expr)
:
noexcept
等效于默认noexcept(true)
那么,在未来,我们是否可以想象用这个模型来统一所有准数:
const
资格赛将等同于const(true)
volatile
预选赛将等同于volatile(true)
&
预选赛将等同于&(true)
&&
限定符将等同于&&(true)
而且,锦上添花,使限定词可以扣除,以便能够写出以下内容:
template <typename Fn>
struct function_traits;
template <typename R, bool CQ, bool VQ, bool LVRQ, bool RVRQ, bool NEQ, ARGS... Args>
struct function_traits<R(Args...) const(CQ) volatile(VQ) &(LVRQ) &&(RVRQ) noexcept(NEQ)>
{
static constexpr bool is_const_qualified = CQ;
static constexpr bool is_volatile_qualified = VQ;
static constexpr bool is_lvalue_ref_qualified = LVRQ;
...
};
我想听听对这些问题的任何想法。
我之前在std-proposals邮件列表中提出了类似的建议。在此处和此处查看线程。
这次讨论得出的结论是,在语言中添加这样一个功能将是大量的工作。不仅有必要在语言中添加规则以推断限定符的布尔参数,而且还存在许多其他问题,例如实例化和评估限定符的点。这种规模的提案还可能引入许多其他必须敲定的问题。
Gašper Ažman似乎认为,某种形式的"计算演绎"将是解决问题的替代解决方案,这将更加可行。如果您有兴趣帮助这项工作,那么我建议您与他联系。
相关文章:
- 为什么在我的函数类型后使用引用运算符 (&) 允许我修改它返回的值?
- 来自 DLL 的函数调用 [表观调用的括号前面的表达式必须具有(指向-)函数类型]
- 是否有任何建议来统一函数类型限定符并简化可恶的函数类型?
- 关于 C++ 中的函数类型定义
- 用于检测函数类型是否为否的特征
- 函数类型参数的模板参数推导
- 标准对此指向成员函数类型模板参数有何说明?是我的代码有误,还是 MSVS 16.6 有问题?
- C++无效的函数类型转换
- STL 函数和函数类型与函数指针类型
- 如何将result_of与函数类型定义一起使用
- 将模板(没有规范)传递给 std::thread() 会出现错误:<未解析的重载函数类型>匹配错误
- C++ 编译错误:gnu_printf是无法识别的格式函数类型
- 专门用于"direct"函数类型(与函数指针类型相对)
- 将函数类型作为模板参数传递不会编译
- 通过参数传递 lambda(无函数类型模板)
- 如何在模板参数中分离函数类型返回类型和参数
- 为什么比较函数类型需要指定为模板参数?
- 带有限定符的函数类型定义用例
- 如何声明对函数类型的常量引用
- 非类型模板参数允许各种函数类型?