2017-02-25 14 views
7

Tôi có hai chức năng một trong số chúng có chức năng như một đối số, nó hoạt động tốt, nhưng tôi muốn gọi hàm này được truyền trong hàm thứ hai.C++ sử dụng chức năng được thông qua

class XY { 
public: 

    void first(void f()); 
    void second();   
}; 

void XY::first(void f()){ 

} 

void XY::second(){ 
f(); //passed function from first() 
} 
+0

Bạn có gọi thứ hai từ đầu tiên hoặc làm bạn gọi thứ hai một cách độc lập tại một sau điểm? – NineBerry

+1

Có thể muốn xem xét điều này. http://stackoverflow.com/questions/12662891/passing-a-member-function-as-an-argument-in-c – Transzendental

+0

Lần đầu tiên được gọi là một lần và giây được gọi độc lập sau – Maximilian

Trả lời

12

Bạn có thể sử dụng std :: function để lưu trữ cuộc gọi và gọi sau.

class X { 
    public: 
     void set(std::function<void()> f) { 
      callable = f; 
     } 

     void call() const { 
      callable(); 
     } 

    private: 
     std::function<void()> callable; 
}; 

void f() { 
    std::cout << "Meow" << std::endl; 
} 

Sau đó tạo X dụ và thiết lập callable:

X x; 
x.set(f); 

Sau đó gọi được lưu trữ callable:

x.call(); 
+3

upvoted, tuyệt vời C++ 11 câu trả lời, tôi sẽ chỉ đề cập đến mẫu là một phần của tiêu đề user

+0

@user Tôi bỏ qua các tiêu đề cần thiết vì nó thường được thực hiện trong sách và thuyết trình để tiết kiệm không gian ... –

+0

Ngăn xếp ngăn xếp không giới hạn không gian theo cùng cách sách và bản trình bày và bao gồm các chỉ thị tiền xử lý như '# include' được khuyến khích. –

Các vấn đề liên quan