我想知道标准委员会是否考虑扩展C++14auto
关键字来推导函数模板参数类型,就像现在泛型 lambda 中存在的那样。 (正如这个答案中很好地描述的那样)
因为它适用于 lambda 函数,所以它也应该适用于任何函数。当然,这对于经典语法来说是完全多余的:
template< typename T >
void f(T param);
但能够这样写,得到相同的结果:
void f(auto param);
我认为可以减少堵塞的代码(更短、更整洁),并在这个用例中实现良好的一致性:
auto v = func1();
f(v);
正如你所看到的,我们使用自动类型推导器来声明v
,但是我们必须使用硬类型参数化函数 f 或模板化 f。
结合auto
我们应该使用auto
,这样会更加一致。
EDIT: 这个问题确实有效地问了同样的事情,但不那么直接。尚未得到 user657267 给出的答案,我在其下复制并扩展。
好的,感谢 Piotr 指出了另一个问题,询问了同样的事情,我在评论中找到了可以解决此问题的信息,如下:
http://www.open-std.org/jtc1/sc22/wg21/docs/papers/2014/n4040.pdf
第 16 页,第 5.1.1 章命名generic functions
泛型函数是一个函数模板,其
template-parameter-list 有一个参数声明,其
类型说明符是 auto 或 constrained-type-name。
[ 例子:
auto f(auto x); // Ok
void sort(C& c); // Ok (assuming C names a concept)
—结束示例]
这看起来相当积极:)
接下来是与通用 lambda 匹配的预期明显措辞:
泛型函数的声明有一个模板参数列表
由一个发明的类型模板参数组成
自动的发生。
[ 示例:以下通用函数声明是等效的:
template<typenaem T>
conxtexpr bool C() { ... }
auto f(auto x, const C& y);
template<typename T1, C T2>
auto f(T1 x, const T2& y);
y 的类型是受 C 约束的类型参数。 — 示例结束]
本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)