gpt4 book ai didi

c++ - 指针和左移运算符引用

转载 作者:搜寻专家 更新时间:2023-10-31 01:18:18 24 4
gpt4 key购买 nike

我重新定义了 << 运算符,我希望它采用指针的引用。

class foo
{
foo();
virtual ~foo();

void operator << (BaseService*& iRight);
}

在代码的某处,有一个 foo 实例和一个服务,它是我做的 BaseService 类的特化:

Service* service_pointer = new Service();
foo_instance << service_pointer;

但是我得到这个错误: 错误:“foo_instance << service_pointer”中的“operator<<”不匹配 注意:候选人是:void foo::operator<<(BaseService*&)

如果我 dynamic_cast 我的 service_pointer 到 BaseService 没有任何改变

Service* service_pointer = new Service();
foo_instance << dynamic_cast<BaseService*>(service_pointer);

有什么想法吗?

最佳答案

第一个版本不起作用,因为您不能传递对子类型指针的引用,这是正确的:如果 operator<< 的实现会怎样?使指针指向实例 MyService (它是 BaseService 的子类,但不是 Service 的子类)?显然,Service* 是非法的指向 MyService .所以传入 Service*不允许。

不允许使用第二个版本,因为 dynamic_cast不返回左值,因此您不能将其作为非常量引用传递。

你唯一能做的就是定义另一个 BaseService* 类型的变量并将其作为参数传递给 << .如果<<然后重新分配指针,该更改仅对新创建的变量可见,不会影响 ServicePointer .

话虽如此(并且不知道您的用例)我必须建议您拥有 operator<<对任何东西进行非常量引用,因为它的正确操作数让我觉得是不好的做法。你通常不会想到 <<修改它的右操作数。

关于c++ - 指针和左移运算符引用,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/7267407/

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