【问题标题】:C++ Function Pointer as Default Template ArgumentC++ 函数指针作为默认模板参数
【发布时间】:2011-05-25 21:19:07
【问题描述】:

如何写一个函数指针作为默认模板参数,我猜是这样写的:

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

我的问题是,

1.有可能吗?

2.如果是并且我上面的猜测代码是正确的,那么PF 的目的是什么?我需要这个吗?

【问题讨论】:

    标签: c++ templates arguments default function-pointers


    【解决方案1】:
    1. 是的
    2. 不,你不需要 PF。

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

    【讨论】:

    • 更多问题,我如何为成员函数编写,像这样? template&lt;typename C,typename R,typename A, typename F=R (C::*)(A)&gt;
    • 出错了。 VC'03 上的 C2653:“'C' 不是类或命名空间”typename F=R (C::*)(A)&gt;
    • 我在这里被问到另一个问题:stackoverflow.com/questions/4450246/…
    • @uray:你如何实例化它? C 必须是类类型。
    【解决方案2】:
    1. 是的,有可能
    2. PF 不仅没有用,而且在这种情况下必须删除。例如,在函数指针声明的上下文中是必要的:

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

      但这里既不强制也不合法。

    【讨论】:

      【解决方案3】:

      我建议typedefing 指向函数的指针。 typedef R (*PF)(A); 然后将 PF 作为默认模板参数。

      【讨论】:

        猜你喜欢
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 2021-11-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 2023-03-13
        相关资源
        最近更新 更多