4

我想知道标准委员会是否考虑扩展 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,那会更一致。

编辑:这个问题确实有效地提出了同样的问题,但不那么直接。并且还没有得到 user657267 给出的答案,我在其下复制和扩展。

4

1 回答 1

6

好的,所以感谢 Piotr 指出另一个问题,询问同样的事情,我在评论中找到了可以解决这个问题的信息,这里是:

http://www.open-std.org/jtc1/sc22/wg21/docs/papers/2014/n4040.pdf

第 16 页,第 5.1.1 章命名generic functions

泛型函数是一个函数模板,其模板参数列表有一个参数声明,其类型说明符是自动或受约束的类型名称。

[ 例子:

auto f(auto x); // Ok
void sort(C& c); // Ok (assuming C names a concept)

—结束示例]

这似乎相当积极:)

接下来是预期的明显措辞,与通用 lambda 匹配:

泛型函数的声明有一个模板参数列表,该列表由一个发明的类型模板参数组成,用于每次出现 auto。

[ 示例:以下泛型函数声明是等价的:

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 约束的类型参数。——结束示例]

于 2015-07-27T09:09:21.973 回答