【问题标题】:C++ Conversion Operator Overloading issueC++ 转换运算符重载问题
【发布时间】:2011-03-22 21:09:42
【问题描述】:

我有自己的 SmartPointer 类。

在某些情况下,SmartPtr 包含继承自 Base 类的类,我想转换 SmartPtr<ClassX> into SmartPtr<BaseClassOfClassX>;

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

它适用于类本身,例如:

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> *'

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

【问题讨论】:

    标签: operator-overloading type-conversion


    【解决方案1】:

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

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

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2014-04-14
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多