繁体   English   中英

打印成员函数地址的最简单方法是什么?

[英]What's the easiest way to print the address of a member function?

如果我有一个带有纯虚函数的基类,以及一个实现该函数的派生类,那么我能打印出函数实际被调用的地址的最简单方法是什么?

class A { public: virtual void func()=0; }

class B:A { 
    public: 
        void func() { /*implementation*/ }
        void func2() { *** I WANT TO PRINT THE ADDRESS OF func() HERE! *** }
};

另外,打印出类中静态函数的地址并打印出全局函数的地址的最简单方法是什么?

c ++没有提供任何可移植的方式来打印虚拟函数的地址。

最简单的方法是找出使链接程序输出链接映射的选项,并在那里查找函数名称。

据我所知,无论虚拟性如何,都无法获得实际上将要调用的函数的地址。 具体来说,对于虚拟方法,虚拟调度的方法和目的地留待实现。 但是,即使对于普通功能,功能指针也可能不是该功能的实际代码地址(尽管我怀疑在某些情况下确实如此)。

方法指针并不总是一个地址。 实际上(在gcc上)有两件事:

  • 偏移量
  • 地址或索引

当成员函数指针的最后一位为1时,第二部分为vtable中的偏移量,指示要调用的方法,否则为成员函数的地址。 偏移量将添加到此指针。

这就是为什么成员函数指针大于公共指针的原因。 另外,您应该注意,与函数指针相反,使用成员函数指针会产生开销。

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM