微信公众号搜"智元新知"关注
微信扫一扫可直接关注哦!

类的静态成员函数的调用和初始化

如何解决类的静态成员函数的调用和初始化

我有以下代码

#include <stdint.h>
#include <inttypes.h>
#include <stdio.h>

class A {
public:
 int f();
 int (A::*x)();
};

int A::f() {
 return 1;
}

int main() {
 A a;
 a.x = &A::f;
 printf("%d\n",(a.*(a.x))());
}

我可以正确初始化函数指针的地方。但是我想让函数指针成为静态的,我想在这个类的所有对象中维护它的单个副本。 当我将其声明为静态时

class A {
public:
 int f();
 static int (A::*x)();
};

我不确定将它初始化为函数 f 的方式/语法。任何资源都会有帮助

解决方法

指向成员函数的静态指针(我猜你已经知道这与指向静态成员函数的指针不同)是一种静态成员数据,所以你必须像你一样在类之外提供一个定义将处理其他静态成员数据。

class A
{
public:
   int f();
   static int (A::*x)();
};

// readable version
using ptr_to_A_memfn = int (A::*)(void);
ptr_to_A_memfn A::x = &A::f;

// single-line version
int (A::* A::x)(void) = &A::f;

int main()
{
   A a;
   printf("%d\n",(a.*(A::x))());
}

版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 dio@foxmail.com 举报,一经查实,本站将立刻删除。