Message from discussion
ciclo statico su una tupla
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