我正在寻找一种在不创建类实例的情况下调用成员函数的方法,我不是指静态函数。
情况如下:
//Texture.cpp
#include "Window.hpp"//Window included
void Texture::Init(const char* path, const Window&)
{
loadTexture(path, Window.getRenderer();
}
void Texture::loadTexture(const char* path, SDL_Renderer* renderer)
{
//code...
}
Window具有成员函数SDL_Renderer * getRenderer()。但是,我不能在这种情况下使用它,因为没有创建Window的实例。
我遇到了this question,如果我必须自己找到一个方法,我会做同样的事情:创建静态功能。但是,这看起来像是为我解决了一个问题。使用std :: function和std :: bind的答案看起来不错,但我无法弄清楚如何使用它。有人可以帮帮我吗?
我有:
有没有人可以帮我解释一下,所以下次遇到这个问题时我可以自己做同样的事情吗?
提前致谢。
答案 0 :(得分:6)
如果没有实例,你就无法执行非静态方法(std :: function和其他任何东西都不允许这样做。)
通常非静态方法访问某些实例数据。您必须提供这些数据(即实例)。
在你的情况下,我认为渲染器必须知道它渲染的窗口。
但是你为什么要在没有实例的情况下调用getRenderer?您有一个实例:const Window&
是一个实例。所以只需使用第二个参数:
void Texture::Init(const char* path, const Window& wnd)
{
loadTexture(path, wnd.getRenderer());
}