2015-02-24 163 views
0

我需要将我的函数作为参数传递,但它应该是模板函数。例如。指向模板函数的指针

template <class rettype, class argtype> rettype test(argtype x) 
{ 
    return (rettype)x; 
} 

我需要使用此函数作为方法的参数。

template <class type,class value> class MyClass 
{ 
    // constructors, etc 

    template <class type,class value> void myFunc(<function should be here with parameters >) { 
    rettype result = function(argtype); 
} 
}; 

是否可以这样做?

+0

你在哪里提议从中获取类型的'数据argtype'? – Yakk 2015-02-24 21:09:50

回答

1

只要在语言上清楚 - 没有什么叫做模板函数的指针。有指向从函数模板实例化的函数的指针。

我认为这是你在找什么:

template <class type, class value> struct MyClass 
{ 
    template <class rettype, class argtype> 
    rettype myFunc(rettype (*function)(argtype), argtype v) 
    { 
     return function(v); 
    } 
}; 

这里有一个简单的程序和它的输出。

#include <iostream> 

template <class rettype, class argtype> rettype test(argtype x) 
{ 
    return (rettype)x; 
} 

template <class type,class value> struct MyClass 
{ 
    template <class rettype, class argtype> 
    rettype myFunc(rettype (*function)(argtype), argtype v) 
    { 
     return function(v); 
    } 
}; 


int main() 
{ 
    MyClass<int, double> obj; 
    std::cout << obj.myFunc(test<int, float>, 20.3f) << std::endl; 
          // ^^^ pointer to a function instantiated 
          // from the function template. 
} 

输出

 
20 
+0

是否有任何原因不会与['std :: function'](http://en.cppreference.com/w/cpp/utility/functional/function)一起使用,这可能会使其稍微更具可读性。或者只是因为OP要求纯函数指针? – luk32 2015-02-24 21:06:30

+0

仅仅因为OP询问了简单的函数指针。 – 2015-02-24 21:07:37