2010-12-15 89 views
6

我怎麼寫一個函數指針作爲默認的模板參數,我'猜它寫這樣的:C++函數指針作爲默認模板參數

template<typename R, 
     typename A, 
     typename F=R (*PF)(A)> 
class FunctionPtr { ... 

我的問題是,

1.is有可能嗎?

2.如果是我上面的猜測代碼是正確的,PF這裏的目的是什麼?我需要這個嗎?

回答

3
  1. 不,你不需要PF。

    template<typename R, 
         typename A, 
         typename F=R (*)(A)> 
    
+0

更多的問題,我如何寫成員函數,像這樣? 'template ' – uray 2010-12-15 12:28:12

+0

got err。在VC'03上的C2653:''C'不是'typename F = R(C :: *)(A)>' – uray 2010-12-15 13:04:53

+0

'上的類或名稱空間'我在這裏問了另一個問題:http://stackoverflow.com/questions/4450246/c-pointer-to-member-function-as-template-default-argument – uray 2010-12-15 13:14:16

2
  1. 是的,這是可能的
  2. PF不僅是無用的,但必須在這種情況下被刪除。例如,在函數指針聲明的上下文中,它是必需的:

    int (*PF)(double) = &A::foo; // declares a 'PF' variable of type 'int (*)(double)' 
    

    但在此處既不要求也不合法。

0

我建議typedef ing指向函數。 typedef R (*PF)(A);然後將PF作爲默認模板參數。