我想实现访问某一类:C++虚方法,不需要“this”指针 - 优化
class A { some properties and methods };
的问题是有多种状态A可以在与方法需要相应的行为。其中一种方法是:
class A
{
void Method1() {
if (A is in state 1) { do something }
else if (A is in state 2) { do something else }
...
}
};
如果多次调用这些方法,那显然不是很理想。因此,一个解决方案,这是简单的实现,将是为不同状态创建几类:
class A
{
class State1 {
virtual void Method1(A& a) { do something; }
...
} State1Instance;
class State2 { ... }
...
};
然后管理的指针,这取决于当前的状态(例如State1Instance)的对象,并调用该对象的方法。这可以避免CPU消耗情况。
但是状态#方法也收到完全无用的“this”指向状态对象的指针。有没有办法避免这种情况?我知道它们之间的差别很小,但我试图尽可能地优化它,并且使用CPU寄存器来获得完全无意义的值并不理想。这对于“虚拟静态”实际上是一个很好的使用,但是这是被禁止的。
你可以建立自己的thunk表。您可以通过元编程,手动,预处理来完成它...很多选项。这个论坛的范围太大了。你可以开始用谷歌搜索“合作访问者”,它通过模板元编程等实现了一个thunk表。 –
而你确认编译器不会优化它吗? – 2017-07-06 15:53:59
使用开关。会更快。除非你不知道所有的状态。否则,使用虚函数并不打扰这一点,编译器可能会优化它(或可能不),但在宏观方案中,性能惩罚将毫无意义。你更大的担心是内存分配将放缓 - 预先分配一些缓冲区并使用新的放置位置。 –