$include_dir="/home/hyper-archives/boost-users/include"; include("$include_dir/msg-header.inc") ?>
From: Peter (p.schregle_at_[hidden])
Date: 2008-04-25 16:12:25
Ovanes,
sorry, I made an error when writing the sample. It should have been:
template <typename T>
struct point : boost::additive<point<T>, T>
{
    T x_;
    T y_;
    explicit point(T x=0, T y=0) : x_(x), y_(y)
    { }
    point & operator += (T offset)
    {
        x_ += offset;
        y_ += offset;
        return *this;
    }
    point & operator -= (T offset)
    {
        x_ -= offset;
        y_ -= offset;
        return *this;
    }
}
This part is working as it should.
My problem comes as soon as I make member templates out of the operators, for example like so
...
    template <typename U>
    point & operator += (U offset)
    {
        x_ += offset;
        y_ += offset;
        return *this;
    }
...
How do I write the boost::additive stuff so that it works with the operator template with all the types U that are instantiated?
Is that at all possible?
Peter
  "Ovanes Markarian" <om_boost_at_[hidden]> schrieb im Newsbeitrag news:a83c1a380804250223i4e3cbcdfu17871dfb0a585600_at_mail.gmail.com...
  Peter,
  AFAIK operator += or operator -= signature must contain a return value. In your case it can probably be void.
  template<class U>
  void operator+=(U offset)
  {
  ...
  }
  ...
  Best Regards,
  Ovanes
  On Fri, Apr 25, 2008 at 10:41 AM, Peter <p.schregle_at_[hidden]> wrote:
    Assuming I have a class like the following:
    template <typename T>
    struct point : boost::additive<point<T>, T>
    {
       T x_;
       T y_;
       explicit point(T x=0, T y=0) : x_(x), y_(y)
       { }
       operator += (T offset)
       {
           x_ += offset;
           y_ += offset;
       }
       operator -= (T offset)
       {
           x_ -= offset;
           y_ -= offset;
       }
    }
    Now I want to change the addition and subtraction operators to allow for
    different types using the following template
    class point ...
       template <typename U>
       operator += (U offset)
       {
           x_ += offset;
           y_ += offset;
       }
       template <typename U>
       operator -= (T offset)
       {
           x_ -= offset;
           y_ -= offset;
       }
    ...
    I cannot figure out how to write the proper syntax for the boost::additive
    class, so that it generates the proper additional operators for all type
    combinations. Is that possible, at all?
    Thanks, Peter
    _______________________________________________
    Boost-users mailing list
    Boost-users_at_[hidden]
    http://listarchives.boost.org/mailman/listinfo.cgi/boost-users
------------------------------------------------------------------------------
  _______________________________________________
  Boost-users mailing list
  Boost-users_at_[hidden]
  http://listarchives.boost.org/mailman/listinfo.cgi/boost-users