模板类实例如何接收不同类型的同一模板类的另一个实例作为其某些函数成员的参数?(我很难用更简单的方式表达我的问题,对此我感到非常抱歉。)
这是一个工作代码。我创建了一个类并将其命名为 MyClass。它在其 operator= 和 operator+ 成员函数上接受相同类型(即 int)的相同模板类。
#include <iostream>
using namespace std;
template<class T>
class MyClass {
protected:
T __val;
public:
MyClass();
MyClass(T val): __val(val) {}
void operator= (const MyClass<T>& r)
{
__val = (T)r.__val;
}
const MyClass<T>& operator+ (const MyClass<T>& r)
{
return *(new MyClass<T>(__val + (T)r.__val));
}
T retval() {return __val;}
};
int main()
{
MyClass<int> myclass1(1);
MyClass<int> myclass2(2);
MyClass<int> myclass3 = myclass1 + myclass2;
cout << myclass3.retval() << endl;
return 0;
}
我对 operator= 和 operator+ 的参数的 __val 成员进行了类型转换,目的如下:
int main()
{
MyClass<int> myclass1(1);
MyClass<double> myclass2(2.5);
MyClass<int> myclass3 = myclass1 + myclass2;
cout << myclass3.retval() << endl;
return 0;
}
显然我会得到一个错误。我不能仅仅因为MyClass<int>::operator+
想要MyClass<int>
参数而不是MyClass<double>
. 我知道我可以重载另一个接受 的 operator+ MyClass<double>
,但我也想使用其他数字类型,例如 float、single 等。为所有这些类型创建重载函数会使我的代码更大,我显然不想这样做发生。
我必须从 MyClass 更改什么才能使我的第二个主要功能正常工作?