c++ - 可以采用具有 const 引用或复制参数的函数的函数指针

标签 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 一起工作。

我想我可以复制它两次。但是如果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/

相关文章:

c++ - 如何在 getline 中使用 stringstream 构造函数?

c++ - 带引用和不带引用的指针类型转换

c++ - 当对象按值从函数返回时构造函数效率低下

c++ - boost::spirit::qi 差异解析器行为

c++ - Linux 上的低延迟串行通信

c++ - 空析构函数崩溃程序 : C++

c++ - 可以使用临时的 stringstream 对象吗?

C++ 存储、加载和查找词典的最有效方法

c++ - 使用 FreeType 加载彩色字体

c++ - 向右移动4个整数不同的值SIMD