类函数成员指针
// The contents of this file are in the public domain. See LICENSE_FOR_EXAMPLE_PROGRAMS.txt /* This is an example illustrating the use of the member_function_pointer object from the dlib C++ Library. */ #include <iostream> #include <dlib/member_function_pointer.h> using namespace dlib; using namespace std; // ---------------------------------------------------------------------------------------- class example_object { public: void do_something ( ) { cout << "hello world" << endl; } void print_this_number ( int num ) { cout << "number you gave me = " << num << endl; } }; // ---------------------------------------------------------------------------------------- int main() { // create a pointer that can point to member functions that take no arguments member_function_pointer<> mfp1; // create a pointer that can point to member functions that take a single int argument member_function_pointer<int> mfp2; example_object obj; // now we set the mfp1 pointer to point to the member function do_something() // on the obj object. mfp1.set(obj, &example_object::do_something); // now we set the mfp1 pointer to point to the member function print_this_number() // on the obj object. mfp2.set(obj, &example_object::print_this_number); // Now we can call the function this pointer points to. This calls the function // obj.do_something() via our member function pointer. mfp1(); // Now we can call the function this pointer points to. This calls the function // obj.print_this_number(5) via our member function pointer. mfp2(5); // The above example shows a very simple use of the member_function_pointer. // A more interesting use of the member_function_pointer is in the implementation // of callbacks or event handlers. For example, when you register an event // handler for a dlib::button click it uses a member_function_pointer // internally to save and later call your event handler. } // ----------------------------------------------------------------------------------------
作者:小菜鸟_yang
本文版权归作者和博客园共有,欢迎转载,但未经作者同意必须保留此段声明,且在文章页面明显位置给出原文连接,否则保留追究法律责任的权利。