|
Boost : |
From: albert meyburgh (ameyburgh_at_[hidden])
Date: 2008-06-17 15:31:26
I believe this is a bug in the boost lambda constructor
I have worked around the problem with this wrapper:
template< typename T >
struct LambdaConstructorWrapper : public boost::lambda::constructor< T >
{
typedef T result_type;
};
and using it as such:
LambdaConstructorWrapper<MyType> myTypeConstructionWrapper;
std::transform(
mycontainer.begin(),
mycontainer.end(),
std::back_inserter( redcontainer ),
boost::bind(myTypeConstructionWrapper, _1,
WHATEVER_PARM));
It seems to behave as expected by adding this one typedef so it's probably a
bug? unless by design it's not supposed to be used this way for some reason
that I don't see?
On Mon, Jun 16, 2008 at 9:55 AM, albert meyburgh <ameyburgh_at_[hidden]>
wrote:
> Thanks for the input on trying to use boost::lambda::bind instead of
> boost::bind, unfortunately there is no bind in the lambda namespace.
>
> I'm using Boost 1.35, and in my version "namespace lambda" only exists in
> boost\lambda\construct.hpp and only contains a single templated struct
> constructor, there is no bind available :(
>
> Any ideas?
>
> I'm trying all sort of funny syntax variations to no avail...
>
> Message: 4
> Date: Fri, 13 Jun 2008 15:37:58 -0700
> From: "albert meyburgh" <ameyburgh_at_[hidden]>
> Subject: [boost] Constructor with parameters -- Lambda
> To: boost_at_[hidden]
> Message-ID:
> <35f053b10806131537o4b85769fg84a88bc0c70dddc4_at_[hidden]>
> Content-Type: text/plain; charset=ISO-8859-1
>
> Hi,
>
> I'm trying to use the lambda constructor provided in boost and it's not
> compiling.
>
> class someclass
> {
> someclass(sometype, int x)
> }
>
> std::vector v<sometype>
> std::vector v2<someclass>
> std::transform( v.begin(),
> v.end(),
> std::back_inserter( v2 ),
> boost::bind( boost::lambda::constructor<someclass>(),
> _1, 5) ); // where 5 is a constant int parameter for x to the constructor
>
> Resulting in
>
> Error 1 error C2039: 'result_type' : is not a member of
> 'boost::lambda::constructor<T>' boost_1_35_0\boost\bind.hpp 67
> Error 2 error C2146: syntax error : missing ';' before identifier
> 'type' boost_1_35_0\boost\bind.hpp 67
> Error 3 error C4430: missing type specifier - int assumed. Note: C++
> does not support default-int boost_1_35_0\boost\bind.hpp 67
> Error 4 error C2208: 'boost::_bi::type' : no members defined using
> this type boost_1_35_0\boost\bind.hpp 67
> Error 5 fatal error C1903: unable to recover from previous error(s);
> stopping compilation boost_1_35_0\boost\bind.hpp 67
>
> What is wrong with my syntax?
>
>
> ------------------------------
>
> Message: 5
> Date: Fri, 13 Jun 2008 15:57:59 -0700
> From: Steven Watanabe <watanabesj_at_[hidden]>
> Subject: Re: [boost] Constructor with parameters -- Lambda
> To: boost_at_[hidden]
> Message-ID: <4852FB77.4000902_at_[hidden]>
> Content-Type: text/plain; charset=ISO-8859-1; format=flowed
>
> AMDG
>
> albert meyburgh wrote:
> > boost::bind( boost::lambda::constructor<someclass>(),
> > _1, 5) ); // where 5 is a constant int parameter for x to the constructor
> >
>
> Use boost::lambda::bind.
>
> In Christ,
> Steven Watanabe
>
>
>
> ------------------------------
>
> Message: 6
> Date: Fri, 13 Jun 2008 15:59:14 -0700
> From: Eric Niebler <eric_at_[hidden]>
> Subject: Re: [boost] Constructor with parameters -- Lambda
> To: boost_at_[hidden]
> Message-ID: <4852FBC2.8040606_at_[hidden]>
> Content-Type: text/plain; charset=ISO-8859-1; format=flowed
>
> albert meyburgh wrote:
> > Hi,
> >
> > I'm trying to use the lambda constructor provided in boost and it's not
> > compiling.
> >
> > class someclass
> > {
> > someclass(sometype, int x)
> > }
> >
> > std::vector v<sometype>
> > std::vector v2<someclass>
> > std::transform( v.begin(),
> > v.end(),
> > std::back_inserter( v2 ),
> > boost::bind( boost::lambda::constructor<someclass>(),
>
> Try boost::lambda::bind() instead of boost::bind().
>
>
> --
> Eric Niebler
> BoostPro Computing
> http://www.boostpro.com
>
Boost list run by bdawes at acm.org, gregod at cs.rpi.edu, cpdaniel at pacbell.net, john at johnmaddock.co.uk