2010-12-15 142 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作为默认模板参数。