如何在不创建类实例的情况下使用成员函数,使用std :: function?

时间:2013-08-31 20:34:14

标签: c++ function class c++11

我正在寻找一种在不创建类实例的情况下调用成员函数的方法,我不是指静态函数。

情况如下:

//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的答案看起来不错,但我无法弄清楚如何使用它。有人可以帮帮我吗?

我有:

  • function loadTexture,将const char *和SDL_Renderer *作为参数,并返回void
  • 函数Init,取const char *和const Window&作为参数,并返回void
  • 类Window,具有函数getRenderer,不带参数并返回SDL_Renderer *

有没有人可以帮我解释一下,所以下次遇到这个问题时我可以自己做同样的事情吗?

提前致谢。

1 个答案:

答案 0 :(得分:6)

如果没有实例,你就无法执行非静态方法(std :: function和其他任何东西都不允许这样做。)

通常非静态方法访问某些实例数据。您必须提供这些数据(即实例)。

在你的情况下,我认为渲染器必须知道它渲染的窗口。

但是你为什么要在没有实例的情况下调用getRenderer?您有一个实例:const Window&是一个实例。所以只需使用第二个参数:

void Texture::Init(const char* path, const Window& wnd)
{
  loadTexture(path, wnd.getRenderer());
}