gpt4 book ai didi

C++ typedef 成员函数签名语法

转载 作者:IT老高 更新时间:2023-10-28 21:36:34 26 4
gpt4 key购买 nike

我想为成员函数签名声明类型定义。全局函数 typedef 如下所示:

typedef int (function_signature)(int, int);
typedef int (*function_pointer) (int, int);

但是对于成员函数,我不能做同样的事情:

typedef int (foo::memberf_signature)(int, int);   // memberf_pointer is not a member of foo
typedef int (foo::*memberf_pointer)(int, int);

这听起来合乎逻辑,因为 foo:: 是访问 foo 类中的成员的语法。

我怎样才能 typedef 只是签名?

最佳答案

关于笨拙的函数指针语法的问题,我个人使用了一个备忘单:The Function Pointers Tutorial (downloadable here,感谢 Vector 指出)。

但是,正如您所经历的那样,成员函数的签名与常规函数的签名有点不同。

您可能知道,成员函数有一个隐藏参数this,需要指定其类型。

// C++11 and above.
using Member = int (Foo::*)(int, int);

// C++03 and below.
typedef int (Foo::*Member)(int, int);

允许您指定传递给函数的第一个元素将是 Foo* (因此,当您想到它时,您的方法实际上需要 3 个参数,而不仅仅是 2 个。

但是还有另一个原因,强制你指定类型。

函数指针可能指向一个虚函数,在这种情况下事情会变得相当复杂。因此,内存中表示的 size 会根据函数的类型而变化。实际上,在 Visual Studio 上,函数指针的大小可能是常规指针大小的 1 到 4 倍。这主要取决于函数是否为虚函数。

因此,函数引用的类是签名的一部分,没有变通方法。

关于C++ typedef 成员函数签名语法,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/4832275/

26 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com