gpt4 book ai didi

operator-overloading - C++ 转换运算符重载问题

转载 作者:行者123 更新时间:2023-12-02 05:13:16 25 4
gpt4 key购买 nike

我有自己的 SmartPointer 类。

有些情况下 SmartPtr 包含一个继承自基类的类,我想转换 SmartPtr<ClassX> into SmartPtr<BaseClassOfClassX>;

我正在尝试重载 SmartPtr 转换运算符来执行此操作。

它适用于类本身,例如:

template<class newType>
operator SmartPtr<newType>() const
{
return SmartPtr<newType>((SmartPtr<newType>*)this);
}

但不是指向类的指针,我尝试了以下方法,但它永远不会被调用并出现以下错误:

template<class newType>
operator SmartPtr<newType>*() const
{
return static_cast<SmartPtr<newType>*>(this);
}

获取错误的简单代码:

    SmartPtr<ClassX> test(pClassX);
SmartPtr<BaseClassOfClassX>* ob = &test;

ERROR:
cannot convert from 'SmartPtr<T> *' to 'SmartPtr<T> *'

有人看到我的第二次转换过载有什么问题吗?谢谢

最佳答案

来自 C++ 标准:“一个运算符函数要么是一个非静态成员函数,要么是一个非成员函数,并且至少有一个类型为类、对类的引用、枚举或对枚举的引用的参数。"

由于 &test 的类型不是类,也不是任何可隐式转换为类的类型,因此您不能直接在指针上重载类型转换。根据您需要指向智能指针的原因,您可能真的想使用更常见的引用。

关于operator-overloading - C++ 转换运算符重载问题,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/3365446/

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