C++函数指针作为默认模板参数

6
我该如何将函数指针作为默认模板参数进行编写?我猜应该像这样编写:
```template```
template<typename R,
         typename A,
         typename F=R (*PF)(A)> 
class FunctionPtr { ...

我的问题是:
1. 这是否可能?
2. 如果这是可能的,并且我上面猜测的代码是正确的,那么这里的PF的目的是什么?我需要它吗?
3个回答

3
  1. Yes
  2. No, you don't need PF.

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

更多问题,我如何编写成员函数,像这样?template<typename C,typename R,typename A, typename F=R (C::*)(A)> - uray
在VC'03上出现了错误C2653:“'C'不是类或命名空间”,位于typename F=R(C::*)(A)> - uray
我在这里被问了另一个问题:http://stackoverflow.com/questions/4450246/c-pointer-to-member-function-as-template-default-argument - uray
@uray:你如何实例化这个?C必须是一个类类型。 - kennytm

2
  1. Yes, it is possible
  2. The PF not only is useless but must be removed in this context. It would, for example, be necessary in the context of a function pointer declaration :

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

    but it is neither required nor legal here.


0

我建议使用typedef来定义函数指针。例如:typedef R (*PF)(A); 然后将 PF 作为默认的模板参数。


网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接