v.o*_*dou 4 c++ auto c++14 c++17
我想知道标准委员会是否考虑扩展 C++14auto关键字来推断函数模板参数类型,因为它现在存在于泛型 lambda 中。(正如在这个答案中可以很好地描述的那样)
因为它适用于 lambda 函数,所以它也应该适用于任何函数。当然,使用经典语法将完全多余:
template< typename T >
void f(T param);
Run Code Online (Sandbox Code Playgroud)
但是能够写这个,以获得相同的结果:
void f(auto param);
Run Code Online (Sandbox Code Playgroud)
我认为可以减少阻塞的代码(更短更整洁),并在这个用例中实现很好的一致性:
auto v = func1();
f(v);
Run Code Online (Sandbox Code Playgroud)
如您所见,我们使用自动类型推导器来声明v,但随后我们必须使用硬类型参数化函数 f 或模板化函数 f。
结合auto我们应该使用auto,这将更加一致。
编辑:这个问题确实有效地提出了同样的问题,但不那么直接。并且还没有得到 user657267 给出的答案,我在其下复制和扩展。
好的,感谢 Piotr 指出另一个问题,询问同样的事情,我在评论中找到了可以解决此问题的信息,这里是:
http://www.open-std.org/jtc1/sc22/wg21/docs/papers/2014/n4040.pdf
第 16 页,第 5.1.1 章命名 generic functions
泛型函数是一个函数模板,其模板参数列表有一个参数声明,其类型说明符要么是 auto 要么是受约束的类型名称。
[ 例子:
Run Code Online (Sandbox Code Playgroud)auto f(auto x); // Ok void sort(C& c); // Ok (assuming C names a concept)— 结束示例 ]
这似乎相当积极:)
后跟与通用 lambda 匹配的 expected 明显措辞:
泛型函数的声明有一个模板参数列表,该列表由每次出现 auto 时发明的类型模板参数组成。
[ 示例:以下通用函数声明是等效的:
Run Code Online (Sandbox Code Playgroud)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 约束的类型参数。 — 结束示例 ]
| 归档时间: |
|
| 查看次数: |
10822 次 |
| 最近记录: |