c++ - 返回 C++ 函数最后一个参数的通用包装器

标签 c++ templates function parameters function-pointers

我们编写了一个大型库函数,其原型(prototype)大多如下所示:

void my_fun(
  const in_class & in_param_1, 
  const in_class & in_param_2,
  const in_class & in_param_3,
  out_class & out_param);

是否有一种通用方法来包装这些函数,以便以下内容等效(假设 out_param 仅写入 my_fun 中):

out_class my_out;
my_fun(my_in1,my_in2,my_in3,my_out);

out_class my_out = generic_wrapper(&my_fun,my_in1,my_in2,my_in3);

如何编写这样一个 generic_wrapper?如果可能的话,也可以编写它,以便输入参数的数量是可变的,这样我就可以将它与 my_fun2 一起使用,它可能需要 4 个 in_param_?

最佳答案

考虑所有情况:

template<class T1, class Out>
Out generic_wrapper(void (*f)(const T1 &, Out &), const T1 & t1) { 
    Out out; 
    f(t1,out); 
    return out;
}

template<class T1, class T2, class Out>
Out generic_wrapper(void (*f)(const T1 &, const T2 &, Out &), const T1 & t1, const T1 & t2) { 
    Out out; 
    f(t1,t2,out); 
    return out;
}

// .....

template<class T1, class T2, class T3, class T4, class T5, class Out>
Out generic_wrapper(void (*f)(const T1 &, const T2 &, const T3 &, const T4 &, const T5 &, Out &), const T1 & t1, const T1 & t2, const T3 & t3, const T4 & t4, const T5 & t5) { 
    Out out; 
    f(t1,t2,t3,t4,t5,out); 
    return out;
}

关于c++ - 返回 C++ 函数最后一个参数的通用包装器,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/7805834/

相关文章:

c++ - "2 duplicate symbols for architecture"编译包Rcpp、RcppProgress时

javascript - 我可以将 html 元素传递到 jinja 变量中吗?

c++ - 什么是指向成员模板参数的指针?

for循环错误中的JavaScript匿名函数

c++ - extern const,哪个是声明,哪个是前向声明

c++ - 使用 C++ 在 QT 中加载 COM DLL(无 header )?

c++ - 在 C++ 中,每个 "statement"也是一个表达式吗?

c++ - 模板偏特化

C++通过派生对象访问基类的虚函数

c - C中void函数的return语句