簡體   English   中英

如何通過另一個函數傳遞變化的成員函數?

[英]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_backpush_front的lambda進行調用。

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM