使用函数指针类型作为模板参数

时间:2009-12-19 20:32:59

标签: c++ templates

我正在尝试编写一个模板,它将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,如果该行为是依赖于编译器的行为。

2 个答案:

答案 0 :(得分:2)

typeof不是有效的C ++,但是如果我用这些替换涉及它们的两行,那么您的代码可以在FunFunc的定义中正常工作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;

模板参数是为函数自动推导的!