我有以下模板代码:
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):
error C2679: binary '=' : no operator found which takes a right-hand operand of type >>'ClassName *' (or there is no acceptable conversion)
我在模板基类中定义了一个操作符,为什么它不起作用?
最佳答案
它得到继承。但是,编译器为 TempaltePtr_ClassName
生成的赋值运算符隐藏了继承的运算符。您可以通过添加使其可见
using TempaltePtr<ClassName>::operator=;
到您的派生类。
关于c++ - 为什么 operator = 不从模板类继承,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/4122214/