我正在尝试编写一个模板,它将functionpointer的类型作为模板参数,并将相应的函数指针作为函数参数,所以作为一个简单的例子,我现在正在这样做:
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,如果该行为是依赖于编译器的行为。
答案 0 :(得分:2)
typeof
不是有效的C ++,但是如果我用这些替换涉及它们的两行,那么您的代码可以在Fun
或Func
的定义中正常工作1}}。
MyFunc
和
typedef int (*Fun)(int);
答案 1 :(得分:2)
这个场景你真的不需要Test
类,为什么在这里使用typeof
函数?
template< typename T, typename fT >
T TestMyFunc( T t, fT f ) {
return f(t);
};
会做,而不是摆弄函数指针类型:
std::cout << TestMyFunc(5,myfunc) << std::endl;
模板参数是为函数自动推导的!