首页 > 解决方案 > 如何通过另一个函数传递不断变化的成员函数?

问题描述

我试图通过另一个函数 (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);

标签: c++function-pointersnon-staticpass-by-pointer

解决方案


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


推荐阅读