操作员使用模板超载
operator overloading using template
我正在编写一个名为 double 的类,该类在C 中扩展了内置的'double'。它具有"双重"类型的数据成员。对于类 double ,我需要超载许多基本的算术运算符,例如" "," - ","*","/"。例如," "操作员以这种方式超载:
Relation<Double>* operator+ (Double &d2)
// Relation is a abstract class template.
{
/*
...code that do something else.
*/
return new Plus<Double>(this, &d2); // Plus is derived from Relation.
}
// Double + Double returns a Relation pointer.
和" - "运算符以相同的方式超载:
Relation<Double>* operator- (Double &d2)
{
/*
...code that do something else but the same as above.
*/
return new Minus<Double>(this, &d2);
}
实际计算是由关系中的成员函数完成的类。运算符物体的唯一区别是对象初始化( plus vs 减去(。对于恰好需要两个操作数的操作员,我应该一直这样进行超负荷,这是重复而不是不错的。因此,我想到了模板功能。但是问题是,我可以通过 plus 或减去作为模板参数,但不能传递操作员。如何制作模板或使用其他方法来使这些运算符的重载?
现在,我唯一能想到的就是这样:
template<typename T>
struct OperatorMinus {
static T doIt(T const& lhs, T const& rhs) { return lhs - rhs; };
}
template<typename T>
struct OperatorPlus {
static T doIt(T const& lhs, T const& rhs) { return lhs + rhs; };
}
template<typename T, typename U>
class Operator: public Relation<T>
public:
Operator(T const& lhs, T const& rhs): _lhs(lhs), _rhs(rhs) {}
T doIt() override {
return U::doIt(_lhs, _rhs);
}
private:
T _lhs;
T _rhs;
};
Relation<Double>* operator+ (Double &d2)
{
return new Operator<Double, OperatorPlus<Double>>(this, &d2);
}
相关文章:
- 二进制超载操作员=
- GLM超载操作员用于地图不起作用
- 使用超载操作员可以实现另一个操作员超载
- 超载操作员|用于固定尺寸的数组
- 超载<<操作员意外行为?
- 实施超载操作员的麻烦
- 如何超载操作员 如果调用对象不是类对象
- 如何使用向量将类对象存储在超载操作员中
- 在课堂上超载I/O操作员的奇怪行为
- 超载操作员 *
- 超载操作员&lt;&lt; - 必须是二进制操作员
- 超载操作员 仅适用于类的特定情况
- AT()和超载操作员[] C 之间的差异
- 为什么我不能超载 *操作员
- 多个操作数,用于超载 *操作员
- MINGW中的全局超载操作员新/删除
- 超载操作员问题C++
- C 超载操作员问题
- 当我使用STL集时,我应该超载==操作员吗?
- C 我应该超载操作员