函数指针,可以采用具有常量引用或复制参数的函数



我有多个函数可以在一些自定义容器(或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 引用并在必要时将它们复制到其中,但这涉及重写所有操作函数。

但是有没有办法(也许是模板?(让apply_op同时使用这两种操作?

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

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

请参阅工作示例:https://ideone.com/XYrmtq

最新更新