有没有办法在PC中传递auto作为参数?

时间:2015-04-29 13:17:54

标签: c++ function arguments auto

有没有办法将auto作为参数传递给另一个函数?

int function(auto data)
{
    //DOES something
}

4 个答案:

答案 0 :(得分:39)

如果您希望这意味着您可以将任何类型传递给函数,请将其设为模板:

template <typename T> int function(T data);

有一个C ++ 17的提议允许你使用的语法(正如C ++ 14已经为通用lambdas做的那样),但它还不是标准的。

答案 1 :(得分:22)

C ++ 20允许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)

  1. 占位符类型说明符指定一个 占位符类型,稍后将通过从 初始化程序。

  2. 格式的占位符类型说明符 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'