|
Boost Users : |
From: Hicham Mouline (hicham_at_[hidden])
Date: 2008-05-01 12:07:43
Thanks for your clarifications, In your example, if "MyFunc" was
typedef'd before its use in the template argument as say typedef int
(*MyFunc)(int);
it would not conflict with its use in the template argument ? best
regards,
----- Original Message -----
From: "Ovanes Markarian"
To: boost-users_at_[hidden]
Subject: Re: [Boost-users] boost::result_of error?
Date: Thu, 1 May 2008 17:13:40 +0200
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 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