根据参数的数量调用模板中的函数

calling function in a template according to the number of paramters

本文关键字:函数 调用 参数      更新时间:2023-10-16

>我有一个模板,可以根据我作为参数传递的函数计算一些值。但是,并非我传递给模板的每个函数都需要模板中计算的所有参数。

template<typename T>
int func(T function)
{
int a = 0; // some value computed in func
int b = 10; // another value computed in func
return function(a, b);
}
int main()
{
int res = func([](int a, int b)
{
// do somthing
return 0;
}
);
return 0;
}

我想写一些类似的东西

int res2 = func([](int a) // needs only parameter a
{
// do somthing
return 0;
}
);

如果函数只需要模板传递的参数之一。 如何推断传递给模板的函数实现此目的所需的参数数量?

你可以使用 SFINAE:

template <typename F>
auto func(F f) -> decltype(f(42, 42))
{
int a = 0;
int b = 10;
return f(a, b);
}
template <typename F>
auto func(F f) -> decltype(f(42))
{
int a = 51;
return f(51);
}

然后使用它

int res = func([](int a, int b) { return a + b; } );
int res2 = func([](int a) { return a * a; } );