我有多个函数可以在一些自定义容器(或std :: vector)上运行:
template <class T> void op1(const My_container<T> &a) { /* do something */ }
template <class T> void op2(My_container<T> a) { /* do something */ }
现在,我想要另一个功能
template <class T> void apply_op(const My_container<T> &a, void (*op)(My_container<T>)) {
op(a);
}
但是,我希望apply_op能够同时使用op1和op2。
我想我可以复制两次。但是如果操作具有更多参数,并且任一参数可以是通过值或通过const引用,则副本的数量将非常快地变得非常大。另一种方法是编写所有函数来获取const引用并在必要时将它们复制到内部,但这涉及重写所有的op函数。
但有没有办法(模板,也许?)让apply_op与这两种操作一起使用?
答案 0 :(得分:5)
可以通过向apply_op
添加第二个模板参数来实现此结果 - 函数类型:
template <class T, class Op>
void apply_op(const My_container<T> &a, Op op)
{
op(a);
}
参见工作示例:reduce