有没有办法将auto作为参数传递给另一个函数?
int function(auto data)
{
//DOES something
}
答案 0 :(得分:39)
如果您希望这意味着您可以将任何类型传递给函数,请将其设为模板:
template <typename T> int function(T data);
有一个C ++ 17的提议允许你使用的语法(正如C ++ 14已经为通用lambdas做的那样),但它还不是标准的。
答案 1 :(得分:22)
auto
作为函数参数类型此代码在C ++ 20中有效:
int function(auto data) {
// do something, there is no constraint on data
}
作为abbreviated function template。
这是非约束类型约束(即无约束自动参数)的一种特殊情况。 使用概念,约束类型约束版本(即 constrained auto parameter )将例如:
void function(const Sortable auto& data) {
// do something that requires data to be Sortable
// assuming there is a concept named Sortable
}
在我的朋友Yehezkel Bernat的帮助下,规范中的措辞:
9.2.8.5占位符类型说明符 [dcl.spec.auto]
占位符类型说明符:
type-constraint opt 自动
type-constraint opt decltype(auto)
占位符类型说明符指定一个 占位符类型,稍后将通过从 初始化程序。
格式的占位符类型说明符 type-constraint opt auto可以在a的decl-specifier-seq中使用 函数声明或lambda表达式的参数声明 并表示该功能是缩写功能模板 (9.3.3.5)...
答案 2 :(得分:20)
模板是使用普通函数执行此操作的方法:
template <typename T>
int function(T data)
{
//DOES something
}
或者,您可以使用lambda:
auto function = [] (auto data) { /*DOES something*/ };
答案 3 :(得分:1)
我不知道它何时更改,但是目前使用c ++ 14可以使用Question的语法:
https://coliru.stacked-crooked.com/a/93ab03e88f745b6c
只有警告:
g ++ -std = c ++ 14 -Wall -pedantic -pthread main.cpp && ./a.out main.cpp:5:15:警告:在参数声明中使用'auto'仅适用于-fconcepts 无效功能(自动数据)
使用c ++ 11时出现错误:
main.cpp:5:15:错误:仅在-std = c ++ 14或-std = gnu ++ 14
中可用,在参数声明中使用'auto'