我有 class A
,它是按B
类扩展的。然后我有类 Ptr - 一种智能指针。我需要静态Ptr<A>
转换为Ptr<B>
.
编译器一直给我:
错误:从类型Ptr<A>
到类型的static_cast 无效Ptr<B>
我有 class A
,它是按B
类扩展的。然后我有类 Ptr - 一种智能指针。我需要静态Ptr<A>
转换为Ptr<B>
.
编译器一直给我:
错误:从类型Ptr<A>
到类型的static_cast 无效Ptr<B>
那Ptr<A>
和Ptr<B>
是从同一个类 template 实例化的Ptr
,它们的模板参数A
和B
是相关的,并不意味着您可以隐式转换 fromPtr<A>
和Ptr<B>
/或 back。
您必须创建自己的转换运算符:
template <typename T1>
struct Ptr
{
// ...
template <typename T2>
operator Ptr<T2>()
{
return Ptr<T2>(/* ...? */);
}
// ...
};
但是,我真的建议您不要这样做,并找到其他方法来做您想做的事情。
这是不可能的。Ptr<A>
完全是另一种类型,Ptr<B>
即使 A 是从 B 派生的。