当前位置:编程学习 > C/C++ >>

利用C++重载实现类似“类成员指针”的功能

 

代码如下:

 

//: PointerToMemberOperator.cpp 

#include <iostream> 

using namespace std; 

 

class Dog 

public: 

    int run(int i) const  

    {  

        cout << "run\n";   

        return i;  

    } 

    int eat(int i) const  

    {  

        cout << "eat\n";   

        return i;  

    } 

    int sleep(int i) const  

    {  

        cout << "ZZZ\n";  

        return i;  

    } 

    typedef int (Dog::*PMF)(int) const; 

    // operator->* must return an object  

    // that has an operator(): 

    class FunctionObject 

    { 

        Dog* ptr; 

        PMF pmem; 

    public: 

        // Save the object pointer and member pointer 

        FunctionObject(Dog* wp, PMF pmf)  

            : ptr(wp), pmem(pmf)  

        {  

            cout << "FunctionObject constructor\n"; 

        } 

        // Make the call using the object pointer 

        // and member pointer 

        int operator()(int i) const 

        { 

            cout << "FunctionObject::operator()\n"; 

            return (ptr->*pmem)(i); // Make the call 

        } 

    }; 

    FunctionObject operator->*(PMF pmf)  

    {  

        cout << "operator->*" << endl; 

        return FunctionObject(this, pmf); 

    } 

}; 

 

int main() { 

    Dog w; 

    Dog::PMF pmf = &Dog::run; 

    cout << (w->*pmf)(1) << endl; 

    pmf = &Dog::sleep; 

    cout << (w->*pmf)(2) << endl; 

    pmf = &Dog::eat; 

    cout << (w->*pmf)(3) << endl; 

 

 

摘自yucan1001  

补充:软件开发 , C++ ,
CopyRight © 2022 站长资源库 编程知识问答 zzzyk.com All Rights Reserved
部分文章来自网络,