我正在尝试使用 = 的运算符重载实现模板类 到目前为止它适用于非指针元素。对于 Pointer Elements,它并不像我期望的那样工作,所以我的问题是为什么这是母 pig 以及我如何强制 C++ 按我的意愿去做。
我的模板类:
template <class T>
class IBag {
public:
T _val;
void Set(T val) { _val = val; }
T Get() { return _val; }
IBag& operator=(T val) {
this->Set(val);
return *this;
}
operator T() {
return this->Get();
}
};
使用 IBag 类的工作原理:
class IBagExample
{
void showExample() {
IBag<QString*> pbag;
pbag = new QString("Blub"); // This works !
}
};
编译不通过的原因:
class IBagExample
{
void showExample() {
IBag<QString*> pbag = new QString("Blub"); // This doesn't compile !
}
};
我得到的编译器错误是:
error: no viable conversion from 'QString *' to 'IBag<QString *>'
IBag<QString*> pbag2 = new QString("Blub");
^ ~~~~~~~~~~~~~~~~~~~
对我来说似乎是一样的,也许我需要告诉编译器一些事情来理解现在要将什么类型的指针插入 pbag。但我不知道该怎么做。
像这样使用运算符重载
IBag<QString*> pbag; pbag = new QString("Blub"); // This does compile !
看起来很荒谬。
(注意:IBag 示例只是我尝试实现的代码的简化。)
非常感谢,
最佳答案
IBag<QString*> pbag = new QString("Blub");
这实际上并没有调用赋值运算符,它调用了构造函数。您需要定义如下内容:
template <class T>
class IBag {
public:
IBag( const IBag& rhs )
{
// ....
}
};
或:
IBag( const T& rhs )
{
// ....
}
关于C++ Overload Operator = for Pointers 不能正常工作/编译,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/25606231/