Boost logo

Boost :

From: Pavel Chikulaev (pavel.chikulaev_at_[hidden])
Date: 2005-03-07 14:21:21


"Jonathan Turkanis" <technews_at_[hidden]> wrote in message
news:d0i7jt$60a$1_at_sea.gmane.org...
> Now that I look at your sample, I wonder whether it is possible to support
> operators which take instances of different types. This would be essential
> for
> an expression templates library.
Example:
class Vector;
old class Matrix
{
    static lazy::type<Vector> Vector_;
//Actually there is no need to define it
//It is possible to use LAZY_OP(lazy::type<Vector>() * lazy::type<Vector>())
//but defining static object AFAIK is the simpliest way.
public:
    LAZY_OP(Matrix_ * Vector_); // Or Matrix_ * Vector_ I don't remember
    ENABLE_LAZY_OP(Matrix_ = Matrix_ * Vector_);
};
//You can use all classes. Just wrap their types in lazy::type<> and use
//LAZY_OP or ENABLE_LAZY_OP or ALIAS and so on.

I'm predicting you're next question - Is templates supported? Yes.
Example:
template<typename T>
class Matrix
{
    static lazy::type<Matrix> Matrix_;

    template<typename U>
    struct Matrix__ : lazy::type<Matrix<U> > {};
public:

    template<typename U>
    LAZY_OP(Matrix_ + Matrix__<U>()); //A bit uglier, isn't it?
};

> Have you considered the approach taken by Boost.Operators?
    Not yet.
    I still don't know whether to make += lazy operator or
    code += operator as usual.

> Also, I believe Fusion (the sucessor to Tuple) would be a valuable tool.
    Is it (same as)(old version of) Tuple?

--
Pavel Chikulaev 

Boost list run by bdawes at acm.org, gregod at cs.rpi.edu, cpdaniel at pacbell.net, john at johnmaddock.co.uk