如何通过另一个函数传递一个不断变化的成员函数?
How to pass a changing member function through another function?
我正在尝试通过另一个函数 (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
的方法,因此您的代码无法编译。您可以通过传递 lambda 并调用它来对 edit_queue
进行不同的处理:
template <typename Container, typename T>
void edit_queue(std::function<void(Container&, const T&)> func, const T& data)
{
func(queue, data);
}
然后用调用 push_back
或 push_front
的 lambda 调用它。
我正在尝试通过另一个函数 (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
的方法,因此您的代码无法编译。您可以通过传递 lambda 并调用它来对 edit_queue
进行不同的处理:
template <typename Container, typename T>
void edit_queue(std::function<void(Container&, const T&)> func, const T& data)
{
func(queue, data);
}
然后用调用 push_back
或 push_front
的 lambda 调用它。