Вы не можете вызывать функцию-член из указателя, если у вас также нет ссылки на объект. Например:
<code>((object).*(ptrToMember))
Так что вы не сможете добиться этого без изменения сигнатуры вашего метода рендеринга. Эта статья объясняет, почему это вообще плохая идея.
Лучшим способом может быть определение интерфейса "Renderer", который ваши классы, имеющие методы визуализации, могут реализовать и которые являются типом параметра вашего основного метода Render. Затем вы можете написать реализацию StaticCaller для поддержки вызова ваших статических методов по ссылке.
Например (Мой C ++ действительно ржавый, я тоже не скомпилировал).
void Render(IRenderer *Renderer)
{
D3dDevice->BeginScene();
Renderer->Render();
D3dDevice->EndScene();
D3dDevice->Present(0,0,0,0);
}
// The "interface"
public class IRenderer
{
public:
virtual void Render();
};
public class StaticCaller: public IRenderer
{
void (*Call)();
public:
StaticCaller((*Call)())
{
this->Call = Call;
}
void Render()
{
Call();
}
};
Все это довольно шаблонно, но это должно улучшить читаемость.