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
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@lists.boost.org
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@mouline.org> 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@lists.boost.org
http://lists.boost.org/mailman/listinfo.cgi/boost-users
_______________________________________________
Boost-users mailing list
Boost-users@lists.boost.org
http://lists.boost.org/mailman/listinfo.cgi/boost-users
_______________________________________________
Boost-users mailing list
Boost-users@lists.boost.org
http://lists.boost.org/mailman/listinfo.cgi/boost-users