0

答案中,@James Kanze 按返回类型显示了运算符重载的实现,如下所示:

class Proxy
{
    My const* myOwner;
public:
    Proxy( My const* owner ) : myOwner( owner ) {}
    operator int() const
    {
        return myOwner->getInt();
    }
    operator char() const
    {
        return myOwner->getChar();
    }
};

然后我在没有代理的情况下实现自己的:

using namespace std;
#include <iostream>
#include <string>
const class Czxyl
{
private:
    int a = 1;
    char b = 'c';
    float c = 1.1;
public:
    Czxyl() = default;
    constexpr Czxyl(int a, char b, float c) : a{ a }, b{ b }, c{ c } {}
    constexpr operator int() const { return a; }
    constexpr operator char() const { return b; }
    constexpr operator float() const { return c; }
    Czxyl get() const { return *this; }
    //Czxyl operator() () const { return *this; }
} czxyl;

int main()
{
    int a = czxyl.get();
    char b = czxyl.get();
    float c = czxyl.get();
    std::cout << a << "\n" << b << "\n" << c << "\n";
}

我不明白为什么要使用代理?

我知道 Proxy 是一种设计模式,但无论如何我都想不出我必须在这里使用这样的设计模式。

任何人都可以使用具体的例子证明代理是必须的吗?

4

0 回答 0