如何检查对象实例上的虚函数是一个特定的实现
How to check a virtual function on an object instance is a certain implementation
我试图检查某个对象实例上的虚拟函数是否来自某个实现。直观地看,它看起来像下面的代码段:
#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)
这行不行
你能建议一下这应该如何工作吗?谢谢。
你能建议一下这应该如何工作吗?
在这个简单的例子中,B
实例的成员函数指针显然有B
类的成员函数的地址,因此测试这一点没有意义。
一般来说,如果有指向未知派生类实例的指针或引用,则不能用标准c++编写此类测试。没有办法在运行时获得虚调用解析到的函数的地址。
但是,GCC确实有一个扩展,允许您这样做。
typedef int (*fptr)(A *);
fptr p = (fptr)(a.*fp);
或者,如果编译器记录了它使用的ABI,您可以使用规范从成员函数指针中提取地址。
相关文章:
- 实现一个在集合上迭代的模板函数
- 在用于格式4的arm模拟器中实现功能时的一个问题
- 有没有比在库中添加一个并非由所有派生类实现的新虚拟函数更好的设计实践
- 为什么我们要为avl树实现返回一个指向节点的指针,而不是void函数
- 给定一个指向堆分配内存的指针,智能指针实现如何为其找到合适的释放函数?
- 为什么在排序链表上的这种合并实现总是将两个列表都设置为 NULL,而只有一个应该设置一个列表?
- 如何为位集找到/实现一个好的哈希函数
- C++哈希表中,两个相同的实现,但一个给出错误
- 如何将这两个函数组合成一个实现?
- 类中的数组变量C++导致"was not declared in this scope"实现文件的一个函数中错误,但在构造函数中不会导致错误
- 为什么这个快速排序实现给出了一个奇怪的输出
- C++:实现一个全局常量,其值由用户给出
- C++:实现一个接收lambda作为输入的高阶函数
- std::sort 一个实现了移动构造函数的类
- GMock - 用另一个实现模拟抽象类
- 有没有办法(C++)创建一个实现某些功能的模板类?
- 创建一个实现选项卡并可用作 QMainWindow 中的"central widget"的类
- 说出一个实现STL兼容序列容器的好指南)
- 一个C++实现的隐马尔可夫模型林安装错误
- 一个实现是否允许在同一地址放置两个相同的函数定义