我有多个函数可用于某些自定义容器(或 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 一起工作。
我想我可以复制它两次。但是如果ops有更多的参数,而且其中一个参数既可以是传值也可以是常量引用,那么拷贝的数量会很快变得非常大。另一种方法是编写所有函数以获取 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
关于c++ - 可以采用具有 const 引用或复制参数的函数的函数指针,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/50173523/