重载类方法与模板

Col*_*-Wu 2 c++

我正在寻找一种优雅的方法(由最少的重复代码定义)以重载运算符以执行以下操作:

我有一个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;
    }
    ....
Run Code Online (Sandbox Code Playgroud)

我一直在对int,long等重复这段代码。由于该值rhs仅在line中使用static_cast<T>(rhs),所以我在重复代码的同时仅更改输入参数的类型。

所以我可以模板化,例如

  template <class T, class U>
  class BaseSignal
  {
    public:
    ....
    // Self-increment
    BaseSignal<T>& operator+=(const U& rhs)
    {
      T rval;
      this->Get(&rval);
      this->Set(rval + static_cast<T>(rhs));
      return *this;
    }
    ....
Run Code Online (Sandbox Code Playgroud)

但是,这似乎使我失去了“重载”方面,因为编译器将自动为我选择正确的方法(它也仅适用U于实例化的原始类型)。

我意识到我正在尝试使用C ++实现某些非类型化的语言行为,这可能不是最聪明的事情,我只是想向一些常用的类中添加一些智能,以使后续代码变得更容易编写。

先感谢您。

Jar*_*d42 5

你可能会做

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;
    }
};
Run Code Online (Sandbox Code Playgroud)