【问题标题】:C++ function pointer as a static memberC++ 函数指针作为静态成员
【发布时间】:2009-10-13 13:14:04
【问题描述】:

我想不出将函数指针声明为静态成员的语法。

#include <iostream>
using namespace std;

class A
{
    static void (*cb)(int a, char c);
};

void A::*cb = NULL;

int main()
{
}

g++ 输出错误“无法声明指向 `void' 成员的指针”。我假设我需要用括号做一些事情,但 void A::(*cb) = NULL 也不起作用。

【问题讨论】:

    标签: c++ function-pointers


    【解决方案1】:

    我引入了一个 typedef,在我看来它更清楚了:

    class A
    {
      typedef void (*FPTR)(int a, char c);
    
      static FPTR cb;
    };
    
    A::FPTR A::cb = NULL;
    

    【讨论】:

    • '有点',他谦虚地宣称!
    • +1 用于类型定义函数指针。 (不应该被枪杀的人,恕我直言;)
    • 谢谢,它也对我帮助很大!可惜我不能标记这个帖子两次。
    【解决方案2】:
    void (*A::cb)(int a, char c) = NULL;
    

    【讨论】:

    • 好 :) 并不是您之前的回答也是如此。这是正确的代码,但它没有定义静态成员。相反,它定义了一个全局成员函数指针。
    • @litb: 不,'void (A::*cb)(int a, char c)' 将是一个成员函数指针,如果我正确理解“成员函数指针”的意思的话(多词术语在 C++ 中很模糊)
    • @AndreyT,您的“否”指的是什么?我是说他的成员指针定义是正确的(因此对他“有效”),但它没有定义“A”的静态函数指针成员(而不是定义一个完全不相关的东西,正如你指出的那样也)。作为对他的编辑的回应,我删除了我的答案并收回了我的反对票(在他说“呵呵……在我的机器上工作。”之后我投了反对票)。我同意这些条款有点模棱两可,但代码不是。从这个意义上说,我不明白你的“否”指的是什么。
    猜你喜欢
    • 1970-01-01
    • 2010-11-02
    • 2018-01-02
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2014-03-06
    • 1970-01-01
    相关资源
    最近更新 更多