可以使用const引用或复制参数的函数的函数指针

时间:2018-05-04 11:08:52

标签: c++

我有多个函数可以在一些自定义容器(或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与这两种操作一起使用?

1 个答案:

答案 0 :(得分:5)

可以通过向apply_op添加第二个模板参数来实现此结果 - 函数类型:

template <class T, class Op> 
void apply_op(const My_container<T> &a, Op op) 
{
    op(a);
}

参见工作示例:reduce