c++

利用C++反射实现动态代理

小樊
81
2024-09-10 18:19:19
栏目: 编程语言

在 C++ 中,我们可以使用模板和函数指针来实现一个简单的动态代理

#include<iostream>
#include<functional>

// 定义一个接口
class ISubject {
public:
    virtual void request() = 0;
};

// 实现一个具体的主题类
class RealSubject : public ISubject {
public:
    void request() override {
        std::cout << "RealSubject: Handling request."<< std::endl;
    }
};

// 定义一个代理类
class Proxy : public ISubject {
public:
    Proxy(ISubject* subject) : m_subject(subject) {}

    void request() override {
        std::cout << "Proxy: Preparing for the request."<< std::endl;
        m_subject->request();
        std::cout << "Proxy: Request handled."<< std::endl;
    }

private:
    ISubject* m_subject;
};

int main() {
    // 创建一个真实主题对象
    RealSubject realSubject;

    // 创建一个代理对象,并将真实主题对象传递给它
    Proxy proxy(&realSubject);

    // 通过代理对象发起请求
    proxy.request();

    return 0;
}

在这个例子中,我们首先定义了一个 ISubject 接口,然后实现了一个 RealSubject 类。接下来,我们定义了一个 Proxy 类,它也实现了 ISubject 接口。Proxy 类接收一个 ISubject 指针作为参数,并在其 request() 方法中调用真实主题的 request() 方法。

main() 函数中,我们创建了一个 RealSubject 对象和一个 Proxy 对象,并将 RealSubject 对象传递给 Proxy 对象。然后,我们通过 Proxy 对象发起请求。这样,我们就可以在不修改 RealSubject 类的情况下,通过 Proxy 类来实现对 RealSubject 类的动态代理。

0
看了该问题的人还看了