c++ - 如何通过另一个函数传递不断变化的成员函数?
问题描述
我试图通过另一个函数 (f2) 传递一个函数 (f1),而不必指定 f1。
示例代码
Class C {
private: std::deque<T*> queue;
public: edit_queue(std::function<void(T*)> f1, void* input);
};
C::edit_queue(...){
queue.f1(input);
}
但是,这不会编译错误:
no member named 'f1' in 'std::__1::deque<T *, std::__1::allocator<T *> >
我希望能够做到这两点:
edit_queue(push_back, T* input); (1)
和
edit_queue(push_front, T* input); (2)
我也尝试过传递函数指针:
public: edit_queue(void (*f1)(T*), T* input);
c::edit_queue(...){queue.f1(input);};
和
private: std::deque<T*>* queue;
...
但得到了相同的结果。
此外,是否也可以不必指定 f1 的输入?例如,(1) 和 (2) 可以很好地工作:
edit_queue(pop_back);
解决方案
f1
不是一种方法,queue
因此您的代码将无法编译。您可以edit_queue
通过传递 lambda 并调用它来进行不同的处理:
template <typename Container, typename T>
void edit_queue(std::function<void(Container&, const T&)> func, const T& data)
{
func(queue, data);
}
push_back
然后使用调用or的 lambda 调用它push_front
。
推荐阅读
- powerbi - 如何使用过滤器嵌入公共报告?
- angular - Nativescript 图表缩放未在事件中返回缩放比例值
- python - 是否有 SciPy 方法来自动裁剪图像,即从 2d `numpy.ndarray` 中修剪零?
- vue.js - 为什么新插入的带有 router-link 标签的组件代替 v-for 列表中特定索引处的单个项目会出错?
- angular - FormArray 中的嵌套 FormGroups 不起作用
- spring-boot - 无法获得正确的 GET 响应
- python - 使用 Python 将 .xlsx 文件转换为 .xls 而不会丢失数据
- azure-iot-hub - 如何将图像输入到 Azure IOT Hub?
- python - python bokeh中的xaxis时间戳格式
- c - linux下如何定位导致应用接收SIGTTIN的代码位置?