我有这个基类(删除了细节)
template<class T>
class GPtr
{
public:
typedef T BaseType;
GPtr& operator=(const BaseType& rhs)
{
m_p = rhs.get();
return *this;
}
private:
BaseType m_p;
};
然后一个子类专门化模板并添加另一个分配选项:
class GDrawablePtr : public GPtr<XYZ>
{
public:
GDrawablePtr& operator=(const RootType& rhs)
{
GPtr::operator =(convert<BaseType::element_type>(rhs));
return *this;
}
/* -- only compiles if this is uncommented
GDrawablePtr& operator=(const BaseType& rhs)
{
GPtr::operator =(rhs);
return *this;
}
*/
};
注释掉该代码后,我在分配实例时会收到有关不明确分配的编译错误。如果我取消注释它,那么即使它似乎没有做任何新的事情,编译也是成功的。
有没有办法避免重新定义原始的基本赋值运算符,这种行为的原因是什么?