我有一个具有两个虚拟成员函数的类:foo
和wrapper
. foo
短而快,并且包含一个多次wrapper
调用的循环。foo
我希望有一些方法可以内联对foo
包装函数内部的调用,即使是从指向对象的指针调用时:
MyClass *obj = getObject();
obj->foo(); // As I understand it, this cannot be inlined. That's okay.
obj->wrapper(); // Nor will this. However, I hope that the machine code
// for the wrapper function will contain inlined calls to
// foo().
从本质上讲,我希望编译器生成包装函数的多个版本——每个可能的类一个——并内联调用适当的foo
,这应该是可能的,因为在选择wrapper
要执行的函数之前确定对象类型。这可能吗?有没有编译器支持这种优化?
编辑:我感谢到目前为止的所有反馈和答案,我最终可能会选择其中一个。但是,大多数回复忽略了我的问题的最后一部分,我解释了为什么我认为这种优化应该是可行的。这确实是我问题的症结所在,我仍然希望有人能解决这个问题。
编辑 2:我选择了 Vlad 的答案,因为他都建议了流行的解决方法并部分解决了我提出的优化(在 David 的答案的评论中)。感谢所有写答案的人——我都读了,没有一个明确的“赢家”。
此外,我发现一篇学术论文提出了与我的建议非常相似的优化:http ://www.ebb.org/bkuhn/articles/cpp-opt.pdf 。