gpt4 book ai didi

c++ - 如何检查对象实例上的虚函数是某种实现

转载 作者:行者123 更新时间:2023-11-30 05:23:22 24 4
gpt4 key购买 nike

我正在尝试检查某个对象实例上的虚函数是否来自某个实现。直觉上它看起来像下面的代码段:

#include <cstdio>
using namespace std;

class A
{
public:

virtual void method()
{
printf("This is from A \n");
}
};

class B : public A
{
public:
virtual void method()
{
printf("This is from B \n");
}
};

int main()
{
B b;

b.method();
if (b.&method == &B::method)
{
printf("Horray! simple. \n");
}


return 0;
}

但显然行 if (b.&method == &B::method) 行不通。

您能否建议这应该如何工作?谢谢。

最佳答案

Can you kindly suggest how this should work?

在这个简单的例子中,B 实例的成员函数指针显然有类 B 的成员函数的地址,测试这个没有意义.

一般来说,如果我们有一个指向未知派生类实例的指针或引用,则无法用标准 C++ 编写此类测试。无法在运行时获取虚拟调用解析到的函数的地址。

但是,GCC 确实有一个 extension这使您可以做到这一点。

 typedef int (*fptr)(A *);
fptr p = (fptr)(a.*fp);

或者,如果编译器记录了它使用的 ABI,您可以使用规范从成员函数指针中提取地址。

关于c++ - 如何检查对象实例上的虚函数是某种实现,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/39220994/

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