代码之家  ›  专栏  ›  技术社区  ›  Grizzly

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

  •  2
  • Grizzly  · 技术社区  · 16 年前

    我正在尝试编写一个模板,将functionpointer的类型作为templateargument,并将相应的functionpointer作为function argument,作为一个简单的示例,我现在正在这样做:

    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 它工作得很好。 那么,我做错了什么?我如何才能让它发挥作用?

    2 回复  |  直到 16 年前
        1
  •  2
  •   xtofl Adam Rosenfield    16 年前

    你真的不需要 Test typeof 这里有什么功能?

    template< typename T, typename fT > 
    T TestMyFunc( T t, fT f ) {
       return f(t);
    };
    

    就可以了,而且不需要修改函数指针类型:

    std::cout << TestMyFunc(5,myfunc) << std::endl;
    

        2
  •  2
  •   CB Bailey    16 年前

    typeof 不是有效的C++,但是如果我用这些替换了两行,那么代码也可以很好地工作。 Fun 或 Func 在定义中 MyFunc

    typedef int (*Fun)(int);
    

    和

    std::cout<<Test<int, int(*)(int)>::MyFunc(5, myfunc)<<std::endl;