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

use*_*557 35 c++ arguments function auto

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

int function(auto data)
{
    //DOES something
}
Run Code Online (Sandbox Code Playgroud)

Mik*_*our 41

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

template <typename T> int function(T data);
Run Code Online (Sandbox Code Playgroud)

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

  • @black:这只是编写相同内容的一种较短的方式.对于为"auto"推导出的每个参数类型,将实例化一个不同的函数,就像命名模板参数一样. (3认同)
  • @BenVoigt是的,这是个主意.Concepts Lite为参数引入了`auto`作为无约束参数的简写,并引入了受约束参数的概念. (2认同)

Ami*_*rsh 34

C++20 允许auto作为函数参数类型

此代码在使用 C++20 时有效:

int function(auto data) {
   // do something, there is no constraint on data
}
Run Code Online (Sandbox Code Playgroud)

作为一个缩写的函数模板

这是非约束类型约束(即无约束自动参数)的特例。使用概念,约束类型约束版本(即受约束的自动参数)将是例如:

void function(const Sortable auto& data) {
    // do something that requires data to be Sortable
    // assuming there is a concept named Sortable
}
Run Code Online (Sandbox Code Playgroud)

在我的朋友Yehezkel Bernat的帮助下,规范中的措辞:

9.2.8.5 占位符类型说明符 [dcl.spec.auto]

占位符类型说明符:

类型约束选择自动

类型约束opt decltype ( auto )

  1. 占位符类型说明符指定一个占位符类型,稍后将通过初始化程序的推导来替换该占位符类型。

  2. type-constraint opt auto形式的占位符类型说明符可以用在函数声明或 lambda 表达式的参数声明的 decl-specifier-seq 中,并表示该函数是一个缩写的函数模板 (9.3. 3.5) ...


Tar*_*ama 23

模板是使用普通函数执行此操作的方式:

template <typename T>
int function(T data)
{
    //DOES something
}
Run Code Online (Sandbox Code Playgroud)

或者,您可以使用lambda:

auto function = [] (auto data) { /*DOES something*/ };
Run Code Online (Sandbox Code Playgroud)

  • 通用lambdas是C++ 14的一个特性. (2认同)