Gmail Calendar Documents Reader Web more »
Recently Visited Groups | Help | Sign in
Google Groups Home
Message from discussion ciclo statico su una tupla

View parsed - Show only message text

Path: g2news1.google.com!news1.google.com!Xl.tags.giganews.com!border1.nntp.dca.giganews.com!nntp.giganews.com!local02.nntp.dca.giganews.com!nntp.kpnqwest.it!news.kpnqwest.it.POSTED!not-for-mail
NNTP-Posting-Date: Fri, 18 Jul 2008 13:38:38 -0500
From: "Max M." <ed...@maxim.comm2000.it>
Subject: Re: [boost] ciclo statico su una tupla
Newsgroups: it.comp.lang.c++
Reply-To: edgar/200...@maxim.comm2000.it
Date: Fri, 18 Jul 2008 20:40:38 +0200
References: <82af8061-0255-46f0-bb54-0fd1a2c09b73@j33g2000pri.googlegroups.com>
User-Agent: KNode/0.10.9
MIME-Version: 1.0
Content-Type: text/plain; charset=iso-8859-1
Content-Transfer-Encoding: 8Bit
Message-ID: <2a6dnSs8as-yfh3VnZ2dnUVZ8tninZ2d@kpnqwest.it>
Lines: 94
X-Usenet-Provider: http://www.giganews.com
NNTP-Posting-Host: 212.97.40.58
X-Trace: sv3-TniAHxOR1jC5oXE0GQTRiwx9BNQuj0fm6KiRqafh11hFHvzhFiTeeV0cQE2nHWWpsRq/j+f/d8Uhv5k!D1N49H5hIxHZjYm1OzklbWcITHiCF6KKObES4v42tODtNe4+cpoC9shuKYDBy88FN9M7FbF7RiAb!jwmewBJDH9g=
X-Abuse-and-DMCA-Info: Please be sure to forward a copy of ALL headers
X-Abuse-and-DMCA-Info: Otherwise we will be unable to process your complaint properly
X-Postfilter: 1.3.39

Marco De Paoli wrote:
> ciao a tutti,
> vorrei fare un ciclo statico su una tupla di n interi

Non conosco benissimo boost::tuple, ma con poche righe di codice (che metto
in fondo al messaggio) ho creato una funzione template 'for_each', che ti
permette di invocare un oggetto funzione su ogni elemento della tupla.


 struct print
 {
       template< class T >
        void operator()( const T& v )
        {       cout << v << endl;
        }
 };

 int main()
 { 
        tuple<int,char,std::string>     t;

        t.get<0>() = 1;
        t.get<1>() = 'C';
        t.get<2>() = "foo";
        

        for_each( t, print() ); 
 }


Ovviamente si possono fare cose pi� sofisticate, e pi� eleganti, come quelle
che fa fusion. Ma se ti basta questo, il codice � sotto la firma.

Max



#include "boost/tuple/tuple.hpp"


template< int Num, class Tuple, class Pred >
struct
for_each_impl
{
        for_each_impl( const Tuple& t, Pred op ) 
        {       using namespace boost; 
            // non ho capito perch�, ma senza questo using non compila
                for_each_impl<Num-1,Tuple,Pred> prev(t,op);
                op( t.get<Num>() );
        }
};

template< class Tuple, class Pred >
struct
for_each_impl<0,Tuple,Pred>
{
        for_each_impl( const Tuple& t, Pred op ) 
        {       using namespace boost;
                op( t.get<0>() );
        }
};

template< class Tuple, class Pred >
void
for_each( const Tuple& t, Pred op )
{
  for_each_impl< tuples::length<Tuple>::value-1,Tuple,Pred> impl(t,op);
};













> 
> dato che boost::tuple non prevede cicli, penso che il modo pi�
> semplice sarebbe scomodare boost::fusion
> 
> il problema � che fusion � nella 1.35 di boost e noi, per altri
> motivi, siamo al momento fermi alla 1.34.1
> 
> qualche altra idea?
> thanks in advance
> 
> ciao,
> Marco


Create a group - Google Groups - Google Home - Terms of Service - Privacy Policy
©2009 Google