gpt4 book ai didi

c++ - 自动转换 redux

转载 作者:行者123 更新时间:2023-11-28 01:13:51 26 4
gpt4 key购买 nike

我之后messed up the description of my previous post在此我已经坐下来并试图传达我的确切意图。

我有一个名为 P 的类,它执行一些不同的目的。我还有 PW,它在 P 上执行一些不同的目的。PW 没有成员变量,只有成员函数。

根据此描述,您会假设代码如下所示:

class P
{
public:
void a( );
};

class PW
{
public:
PW( const P& p ) : p( p ) { }
void b( );
P& p;
};

class C
{
public:
P GetP( ) const { return p; }
private:
P p;
};

// ...
PW& p = c.GetP( ); // valid
// ...

然而,这带来了一个问题。如果没有间接寻址,我无法在任何地方调用 P 的函数。

// ...
p->p->a( )
// ...

我想做的是调用 p->a( ) 并让它自动确定我想调用 P 的成员函数。

还有一个名为 a 的 PW 成员并不能真正扩展 - 如果我向 P 添加(或删除)另一个函数会怎样 - 这将需要添加(或删除)到 PW。

最佳答案

您可以尝试覆盖 operator* 和 operator-> 以返回对嵌入式 p 的访问。像这样的事情可能会成功:

class P
{
public:
void a( ) { std::cout << "a" << std::endl; }
};

class PW
{
public:
PW(P& p) : p(p) { }

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

P & operator*() { return p; }
P * operator->() { return &p; }

private:
P & p;
};

class C
{
public:
P & getP() { return p; }

private:
P p;
};


int main()
{
C c;
PW pw(c.getP());

(*pw).a();
pw->a();
pw.b();

return EXIT_SUCCESS;
}

这段代码打印

a
a
b

但是,这种方法可能会使用户感到困惑,因为 operator* 和 operator-> 的语义变得有点困惑。

关于c++ - 自动转换 redux,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/126297/

26 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com