C++ 重载类方法与模板
我正在寻找一种优雅的方法(由最少的重复代码定义)来重载操作符,以执行以下操作: 我有一个模板类C++ 重载类方法与模板,c++,C++,我正在寻找一种优雅的方法(由最少的重复代码定义)来重载操作符,以执行以下操作: 我有一个模板类BaseSignal,它重载+=操作符,我希望能够接受许多不同的类型。例如,对于double,代码如下所示 template <class T> class BaseSignal { public: .... // Self-increment BaseSignal<T>& operator+=(const double&
BaseSignal
,它重载+=
操作符,我希望能够接受许多不同的类型。例如,对于double,代码如下所示
template <class T>
class BaseSignal
{
public:
....
// Self-increment
BaseSignal<T>& operator+=(const double& rhs)
{
T rval;
this->Get(&rval);
this->Set(rval + static_cast<T>(rhs));
return *this;
}
....
但是看起来我失去了“重载”方面,因为编译器会自动为我选择正确的方法(它也只适用于实例化的原始U
类型)
<>我意识到我正在尝试用C++实现一些非类型化的语言行为,这可能不是最聪明的事情,我只是想给一些常用的类添加一些智能,这样以后的代码就可以写得更容易了。
提前谢谢你。你可以这样做
template <class T>
class BaseSignal
{
public:
// Self-increment
template <class U>
BaseSignal<T>& operator+=(const U& rhs)
{
T rval;
this->Get(&rval);
this->Set(rval + static_cast<T>(rhs));
return *this;
}
};
模板
类基频信号
{
公众:
//自我增值
模板
基本信号和操作员+=(常数U和rhs)
{
右旋;
此->获取(&rval);
此->设置(右舵+静态施法(右舵));
归还*这个;
}
};
为什么你没有让操作员成为模板?根据你在C++上的版本,你可以使用<代码> STD::任何< /Cord> @ Chipster,你如何方便地从中再次获得值?@阿空加瓜山好点。这是公平的批评。是的,我想我得在我把它拿出来的时候把它扔出去,对吗?另外,我还停留在C++14上……您定义的函数模板(恰好是类的方法)正确吗?在这种情况下,我将如何使用这个模板化操作符?我读了[and],但不清楚在使用时何时必须在尖括号中声明类。例如,如果我有一个模板函数,我需要执行x=sum(10,20);
。对于重载运算符,如果可以推导模板(这里就是这种情况),我不也需要在其中的某个地方使用
,例如signal+=foo;
,您不需要手动提供它们。x=sum(10,20)
有效。对于BaseSignal sig;sig+=4.2f;
。无需编写(丑陋的)sig.operator+=(4.2f);
。
template <class T>
class BaseSignal
{
public:
// Self-increment
template <class U>
BaseSignal<T>& operator+=(const U& rhs)
{
T rval;
this->Get(&rval);
this->Set(rval + static_cast<T>(rhs));
return *this;
}
};