我有两个函数调用外部库函数,除了一个有两个额外的参数(假设额外的参数总是为零)。
void func1(int a, int b)
{
libDoAThing(a, b);
}
void func1Special(int a, int b)
{
libDoAThingWithTwoExtraParams(a, b, 0, 0);
}
有没有办法将这些方法组合成一个可以这样调用的方法:
func1<libDoAThing>{10, 10};
func1<libDoAThingWithTwoExtraParams>{10, 10};
我不确定在模板化时如何处理函数调用中的两个额外参数。
答案 0 :(得分:0)
如果你至少可以使用C ++ 11,你可以使用std::bind()
或者我建议用lambda函数修复最后两个参数。
因此您不需要模板参数:您可以将生成的lambda作为func1()
的参数传递并在其中调用。
以下是lambda
的完整工作示例#include <iostream>
void foo (int a, int b)
{ std::cout << "foo: " << a << ", " << b << std::endl; }
void bar (int a, int b, int c, int d)
{ std::cout << "bar: " << a << ", " << b << ", " << c << ", "
<< d << std::endl; }
void func1 (void(*f)(int, int), int x, int y)
{ f(x, y); }
int main ()
{
auto l { [](int a, int b){ bar(a, b, 0, 0); } };
func1(foo, 1, 2);
func1(l, 3, 4);
}