Boost logo

Boost Users :

From: Ovanes Markarian (om_boost_at_[hidden])
Date: 2008-05-01 11:13:40


Hicham,

it does not create a new new type it only declares a type.

Consider the following example:

template<int ()>
struct X
{};

This means your type X expects a function pointer type with return value int
and no parameters. This can be used in a meta programming to make some type
assumptions or inspection. This is how the result_of works. Think of
result_of as of type X but a bit more complex and which can give an
assumption about the function type passed. We can write:

template<int ()>
struct X
{
   typedef int type;
};

A more generic form would be if int would be any valid result type T, so
that we could write smth like this:

template<T ()>
struct X
{
   typedef T type;
};

Actually this is not a legal C++ struct, since T was not declared as
template parameter, but think of it as if it would.

template<T MyFunc()>
struct X
{
   typedef T result_type;
   typedef MyFunc function_type;
};

Here MyFunc is a name of the function pointer type, which allows us to
reference this type from inside the template.

Hope that helps.

With Kinds regards,
Ovanes

On Thu, May 1, 2008 at 2:32 PM, Hicham Mouline <hicham_at_[hidden]> wrote:

> But "floatfct" was defined earlier as the type of a pointer to a function
> with only 1 arg float.
> just passing the template argument to result_of creates a new type?
> is the new type also called floatfct ?
>
> ----- Original Message -----
> From: "Ovanes Markarian"
> To: boost-users_at_[hidden]
> Subject: Re: [Boost-users] boost::result_of error?
> Date: Thu, 1 May 2008 13:58:21 +0200
>
> Hicham,
>
> as far as I understand your code you pass to result_of a new type:
> typedef typename boost::result_of<floatfct(float, float)>::type resultype;
>
> This type is a pointer to a function type, which has as return type a
> pointer to floatfct and as params float, float.
> That's why it compiles.
>
>
> Regards,
> Ovanes
>
>
> On Thu, May 1, 2008 at 1:25 PM, Hicham Mouline <hicham_at_[hidden]> wrote:
>
> > Hello,
> > trying out Pete Becker's "c++ std lib ext" exercises,
> > ex1 p155
> >
> > #include <iostream>
> > #include <typeinfo>
> > #include <boost/utility/result_of.hpp>
> >
> > typedef float (*floatfct)(float);
> > int main(int argc, char* argv[])
> > {
> > typedef typename boost::result_of<floatfct(float, float)>::type
> > resultype;
> > std::cout<< typeid(resultype).name() << std::endl;
> > }
> >
> > should fail, because result_of is instantiated with a callable type with
> > 2 float args,
> > while it's been defined as taking 1 float arg only?
> >
> > with intel10.1-MSVC8-boost1.35, it links.
> >
> > rds,
> > _______________________________________________
> > 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 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