Boost logo

Boost Users :

From: Ovanes Markarian (om_boost_at_[hidden])
Date: 2008-01-28 16:01:24


Sorry, but your test was wrong. Try to pass the array to sum as const
reference. In your case you always copy the array!!! It should not be
faster.

On Jan 28, 2008 9:55 PM, Hicham Mouline <hicham_at_[hidden]> wrote:

> Hi, thanks for your answers,
>
> Because I had tested just with :
>
> 1. static double sum(double d1, double d2, double d3)
> {
> return d1+d2+d3;
> }
>
> vs
>
> 2. static double sum(double d[3])
> {
> return d[0]+d[1]+d[2];
>
> }
>
> with calls to sum() in a tight loop.
>
>
>
> I suspect boost::array is equivalent to 2.
>
> was some 40% faster than 2 with advanced intel optimization.
>
>
>
>
>
> Could you elaborate on the recursive generation?
>
> Rds,
>
>
>
>
>
> template<class T, size N>
> struct Tree
> {
> typedef boost::array<T, N> parameters_types;
>
>
>
>
> };
>
>
>
>
>
> *From:* boost-users-bounces_at_[hidden] [mailto:
> boost-users-bounces_at_[hidden]] *On Behalf Of *Ovanes Markarian
> *Sent:* 28 January 2008 21:27
>
> *To:* boost-users_at_[hidden]
> *Subject:* Re: [Boost-users] Template instantiation function arguments and
> Boost.Preprocessor
>
>
>
> Hi,
>
> besides the more complex possibility to use boost::tuple and generate
> recursive Tree<X> List : derived from Tree<X-1> ...: derived from Tree<0>
> specialization, why not using a boost::array instead?
>
> Here an example:
>
>
> template<class T, size N>
> struct Tree
> {
> typedef boost::array<T, N> parameters_types;
>
>
> T sum(parameters_type const& p)
> {
> return std::accumulate(p.begin(), p.end(), 0);
> }
>
>
> };
>
>
> This is type safe and fast ;) and your users can initialize boost array
> with an initializer list like:
>
>
> parameters_type x = { 1, 2, 3, 4, 5... };
>
>
>
>
> Regards,
> Ovanes
>
>
>
> On Jan 28, 2008 8:26 PM, Hicham Mouline <hicham_at_[hidden]> wrote:
>
> After some though, here is more precisely what I'd like to have...
> I apologize that it is quite different from the initial problem:
>
> template<int n> class Tree {
> static double sum(); //
> };
>
>
> If the user instantiates tree<2>, he should get:
>
> template<> class Tree<2> {
> static double sum(double d1, double d2);
> };
>
> template<> class Tree<3> {
> static double sum(double d1, double d2, double d3);
> };
> etc etc...
>
>
> so that in user code, for e.g.:
>
> double d= Tree<4>::sum(d1, d2, d3, d4);
>
> should compile.
>
>
> Is it possible for me to just define the template Tree for the n-case
> without the 2- and 3- specializations?
>
> Rds,
>
>
> -----Original Message-----
> From: boost-users-bounces_at_[hidden]
> [mailto:boost-users-bounces_at_[hidden]] On Behalf Of Steven Watanabe
> Sent: 28 January 2008 16:42
> To: boost-users_at_[hidden]
> Subject: Re: [Boost-users] Template instantiation function arguments and
> Boost.Preprocessor
>
> AMDG
>
> Hicham Mouline wrote:
> > hi,
> >
> > i have a template function, the arguments of which i wish to have depend
> on a non-type int template argument:
> >
> > template<int n>
> > double f<n>( double arg0, double arg1, ..., double argn ) // ... is
> not
> the variadic notation for var number of args
> > {
> > // for(int i=0; i<n; i++)
> > // code
> > return sum;
> > }
> >
> > int main()
> > {
> > return x = f<3>( 1.0, 2.0, 3.0 );
> > }
> >
> > BOOST_PP_REPEAT can't seem to do the job as the template argument n
> needs
> to be known
> > at the preprocessing stage, which happens before the template
> instantiation stage (
> > this is part of compilation)
> >
>
> I don't understand why you want n to be passed explicitly. Can't it be
> deduced from the
> number of arguments (warning untested):
>
> #define SUM_IMPL(z, n, data) + arg ## n
> #define F_DEF(z, n, data) double f(BOOST_PP_ENUM_PARAMS_Z(z, n, double
> arg)) { return(0.0 BOOST_PP_REPEAT_ ## z(n, SUM_IMPL, ~)); }
>
> BOOST_PP_REPEAT(MAX_ARITY, F_DEF, ~)
>
> In Christ,
> Steven Watanabe
>
> _______________________________________________
> Boost-users mailing list
> Boost-users_at_[hidden]
> http://lists.boost.org/mailman/listinfo.cgi/boost-users
>
> --
> No virus found in this incoming message.
> Checked by AVG Free Edition.
> Version: 7.5.516 / Virus Database: 269.19.14/1247 - Release Date:
> 1/28/2008
> 10:59 AM
>
>
>
> _______________________________________________
> Boost-users mailing list
> Boost-users_at_[hidden]
> http://lists.boost.org/mailman/listinfo.cgi/boost-users
>
>
>
> _______________________________________________
> Boost-users mailing list
> Boost-users_at_[hidden]
> http://lists.boost.org/mailman/listinfo.cgi/boost-users
>



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