Boost logo

Boost Users :

Subject: Re: [Boost-users] [fusion] how to get the tuple of min values of 2 tuples whatever their length?
From: Frédéric Bron (frederic.bron_at_[hidden])
Date: 2013-07-18 07:59:00


> I'm curious, wouldn't fusion's binary transform algorithm work for you?
> c = boost::fusion::transform(a, b, min());

Much simpler indeed! Thanks. Below is the full code.
The part with struct result is a bit strange to me!
I do not understand what Self(T, T) means.
Frédéric

#include <iostream>
#include <string>

#include <boost/fusion/include/for_each.hpp>
#include <boost/fusion/include/transform.hpp>
#include <boost/fusion/include/vector.hpp>
#include <boost/type_traits/remove_reference.hpp>

typedef boost::fusion::vector<double, int, std::string, char> Key;

struct min {
    template <typename Sig>
    struct result;

    template <class Self, typename T>
    struct result< Self(T, T) > {
        typedef typename boost::remove_reference<T>::type type;
    };

    template<typename T>
    T operator()(const T &lhs, const T &rhs) const {
        return std::min(lhs, rhs);
    }
};

struct print {
    template <class T>
    void operator()(const T &rhs) const {
        std::cout<<rhs<<'\n';
    }
};

int main() {
    Key a(1., 0, "zz", 'a');
    Key b(2., -1, "aa", 'a');
    Key c;
    c=boost::fusion::transform(a, b, min());
    boost::fusion::for_each(c, print());
    return 0;
}


Boost-users list run by williamkempf at hotmail.com, kalb at libertysoft.com, bjorn.karlsson at readsoft.com, gregod at cs.rpi.edu, wekempf at cox.net