std::function参数列表和typedefs

4

我有一个类似下面的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 */ };

3
使用 auto 吗? - NathanOliver
@NathanOliver 参数编号不会自动更改。 - songyuanyao
添加新的参数将导致更改主体代码。这意味着您必须通过所有参数并更改主体。因此,更改参数不会对其造成太大伤害。无论如何,查找和替换也是一种解决方案。 - Humam Helfawi
10
函数参数类型应使用单一结构体。 - milleniumbug
拥有未使用参数的函数是一种代码异味。 - Bartek Banachewicz
只是提醒一下,std::function 的模板参数包括返回类型。std::function<ReturnType(Arg1, Arg2)> - alfC
1个回答

0
自C++14开始,您可以使用可变多态lambda:
MyFunction func = [](int arg1, float arg2, auto&&... unused){ /* ... */ };

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

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接