std::函数参数列表和类型定义

std::function arguments list and typedefs

本文关键字:类型 定义 参数 函数 std 列表      更新时间:2023-10-16

我有一个这样的typedef:

typedef std::function<int arg1, float arg2> MyFunction;

在我的代码中的某个地方,它是这样使用的:

MyFunction func = [](int arg1, float arg2){ /* do someting */ };

问题是,每次我更改函数的参数数量时(例如,我添加了第三个参数 char arg3) - 我被迫在我使用 MyFunction 的代码中更新它(即使这些参数根本没有使用。

我懒得这样做。有没有办法从它的类型中获取 std::function 的参数列表?(我的意思是)所以函数创建看起来像那样?

MyFunction func = [](MyFunction::args){ /* do someting */ };

从 C++14 开始,您可以使用可变参数多态 lambda:

MyFunction func = [](int arg1, float arg2, auto&&... unused){ /* ... */ };

对于任何以 int, float 开头的签名,这将转换为 std::function<Sig>