2015-02-24 178 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