【发布时间】:2011-05-06 13:14:59
【问题描述】:
我有以下模板代码:
class ClassName{};
template <class T>
class TemplatePtr
{
public:
void operator=(T* p)
{
}
};
class TemplatePtr_ClassName: public TemplateePtr<ClassName>
{
public:
~TempaltePtr_ClassName();
};
void Test()
{
TemplatePtr_ClassName data;
data = new ClassName;
}
但编译失败并显示错误消息(VS2008):
错误 C2679: 二进制 '=' : 未找到采用 >>'ClassName *' 类型的右侧操作数的运算符(或没有可接受的转换)
为什么我在模板基类中定义了一个运算符,它不起作用?
【问题讨论】:
-
我不敢问你为什么要超载。
-
@Roger Pate 看到那个析构函数了吗?我想自己做一些清理工作,基础模板类中没有提供,不同的类可能会有所不同
-
@lz_prgmr:我理解继承(虽然你应该看特征类),但不是 TemplatePtr 中的重载。
-
@Roger Pate 实际上,这是从一个大型模板类中提取的,以便更清楚地显示问题。该模板类被设计为像 SmartPtr 一样使用,但我发现我需要做一些清理工作,所以我继承了它。
-
@Roger Pate 特征类是个好主意,但我可能无权更改 TemplatePtr 的实现(或者不想通过更改非常低级别的、广泛的-接近发布时使用的类)
标签: c++ templates inheritance