std::function 到带有默认参数的函数

问题描述 投票:0回答:1
#include <iostream>
#include <functional>

using MyFunctionAlias = std::function<void(int, double)>;

void exampleFunction(int value, double value2 = 3.14) {}

int main() {
    MyFunctionAlias func = exampleFunction;

    // OK
    func(10, 2);

    // ERROR
    func(10);

    return 0;
}

问题在于 std::function 对象的声明中不允许使用默认参数,因此必须使用默认参数来调用

func

在我的应用程序中,我使用

MyFunctionAlias
作为不同类中的成员变量,以便为各种情况提供通用类型。在某些类中,有某些可选参数。在这些情况下,我可以简单地为函数调用中的可选参数提供虚拟值,但理想情况下,我不想提供虚拟值,而是在没有默认参数的情况下调用函数,如上面所示。有没有办法使用函数指针来做到这一点?

这里有一个类似的问题,但我认为这个解决方案仅在绑定到相同的函数时才有效——我想将func

设置为不同的函数(
func = exampleFunction2
func = exampleFunction3
,...),具体取决于一些运行时输入。

c++ functor std-function default-arguments
1个回答
0
投票
如果你不需要使用

std::function

 那么你可以只使用 lambda 

auto func = [](auto... vars){ return exampleFunction(vars...); }
如果您不想输入所有内容,您可以使用 

this LIFT()

1

#define RETURNS(...) noexcept(noexcept(__VA_ARGS__)) \ -> decltype(__VA_ARGS__){ return __VA_ARGS__; } #define LIFT(f) [](auto&&... xs) RETURNS(f(::std::forward<decltype(xs)>(xs)...))
你会像这样使用lit

auto func = LIFT(exampleFunction);

1:请参阅链接了解完整详细信息

© www.soinside.com 2019 - 2024. All rights reserved.