使用单个模板化函数调用具有不同参数计数的类似函数

时间:2018-05-27 23:17:14

标签: c++ templates overloading

我有两个函数调用外部库函数,除了一个有两个额外的参数(假设额外的参数总是为零)。

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};

我不确定在模板化时如何处理函数调用中的两个额外参数。

1 个答案:

答案 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);
 }