On Thu, May 1, 2008 at 6:07 PM, Hicham Mouline <
hicham@mouline.org> wrote:
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 ?
First of all. I am sorry for an error I made when stated:
template<T MyFunc()>
struct X
{
typedef T result_type;
typedef MyFunc function_type;
};
This is not a valid C++ code, since MyFunc as the template parameter is a real pointer to a function, it is not a type. And you cannot make a typedef for a pointer. Only for it's type.
To visualize the usage I have written a small program:
#include <iostream>
#include <typeinfo>
typedef int (*MyFunc)(int, int);
int get_int(int x)
{
return x;
}
int plus(int x, int y)
{
return x+y;
}
template<int (*MyFunc)(int)>
struct X
{
typedef int result_type;
result_type exec()const
{
::MyFunc f2 = + //use scope resolution to access the global MyFunc
return MyFunc(10)+f2(10,10);
}
};
int main(int argc, char* argv[])
{
X<&get_int> x;
std::cout << "sum: " << x.exec() << "\n";
}