链接到我的其他问题(Can I make an assignment operator on a base class that returns sub-class type)我有这样的结构,这个想法是我希望得到专门的类型从GPtrBase
,而无需每次都重新写一个赋值操作符:当我专门喜欢递归模板模式;何时完成?
template<class BaseType,class Self>
class GPtrBase
{
public:
...
Self& operator=(const BaseType& rhs)
{
...
return *this;
}
};
然而:
class GDrawablePtr : public GPtrBase<MyDrawable,GDrawablePtr>
我得到的错误:
“回归”:不能从转换“GPtrBase <基地,自>”到“GDrawablePtr &”
我想基于使用的专业化生成一个模板类,所以不宜*this
是在首位输入GDrawablePtr
?
更新:我注意到,如果我添加using GPtrBase::operator=;
它,然后工作,即使GDrawablePtr
绝对不会不定义任何运营商。
您发布的代码原样:http://ideone.com/4grkfv – SomeWittyUsername 2013-04-25 11:46:12
@icepack非常奇怪。 Eiter这是我的编译器(VC++ 2005)的一个怪癖,或者完整代码的一些细节应该归咎于它。我会用较简单的版本进行调查来检查。 – 2013-04-25 12:03:02
@icepack不,它不。由于其参数的类型,“operator =”会被忽略。请参阅http://ideone.com/EWrVAh的程序输出。由于不需要,编译器不会尝试编译它,因此缺少错误消息。 – NonNumeric 2013-04-25 17:34:39