мета несколько операторов перегрузки - PullRequest
2 голосов
/ 30 января 2011

Вопрос в том, смогу ли я найти способ сделать параметризованную перегрузку оператора, т.е. вместо

template <class T>
class A
{
   private:
       T m_var;
   public:
       operator T () const { return m_var; }
       const A operator+ ( const A& r_var ) const { return m_var + r_var; }
       const A operator- ( const A& r_var ) const { return m_var - r_var; }
       const A operator* ( const A& r_var ) const { return m_var * r_var; }
       const A operator/ ( const A& r_var ) const { return m_var / r_var; }
   ...........
}

чтобы что-то вроде этого

template <class T>
class A
{
   private:
       T m_var;
   public:
       operator T () const { return m_var; }
       const A operator 'X' ( const A& r_var ) const { return m_var 'X' r_var; }

   ...........
}

, где 'X' будет принимать значения +, -, *, /, и таким образом, чтобы избежать повторения одного и того же кода шаблона. Заранее спасибо.

Ответы [ 2 ]

2 голосов
/ 30 января 2011

Проверьте boost :: операторов . Это требует + = и * =, которые будут определены вами. Остальные (+, -, *, /, - =, / =) определяются библиотекой. Это также работает для бинарных операторов.

0 голосов
/ 30 января 2011

Это невозможно в шаблонах.Вам нужно будет написать макрос.

Кроме того, вы не должны возвращать const rvalue, потому что вполне законно вызывать неконстантные методы для rvalue типа class.

...