我正在尝试编写一个模板,它将函数指针的类型作为templateargument和相应的函数指针作为函数参数获取,因此作为一个简单的示例,我正在执行此操作:使用函数指针的类型作为模板参数
int myfunc(int a)
{ return a; }
template<typename T, typename Func> struct Test
{
typedef typeof(myfunc) Fun;
static T MyFunc(T val, Func f)
{
return f(val);
}
};
int main(void)
{
std::cout<<Test<int, typeof(myfunc)>::MyFunc(5, myfunc)<<std::endl;
}
但是,这段代码立即崩溃。如果我将f的类型更改为Fun
,它可以很好地工作。 那么我做错了什么,我该如何得到这个工作?
我在windows vista下使用mingw,如果行为是编译器依赖的情况。
typeof不是C++的一部分,所以甚至没有在我的编译器上编译 – 2009-12-19 20:42:32
在这里完美编译和运行。 – 2009-12-19 20:44:21
'typeof'是GCC的扩展。我假设它在MSVC上不可用。 – ZoogieZork 2009-12-19 20:54:55