1

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

情况如下:

//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 的实例。

我遇到了这个问题,如果我必须自己想办法,我会做和那个人一样的事情:创建静态函数。但是,这对我来说似乎是一个问题。使用 std::function 和 std::bind 的答案对我来说看起来不错,但我不知道如何使用它。有人可以帮我吗?

我有:

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

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

提前致谢。

4

1 回答 1

6

您不能在没有实例的情况下执行非静态方法(std::function 或其他任何东西都不允许这样做)。

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

在您的情况下,我认为渲染器必须了解它渲染的窗口。

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

void Texture::Init(const char* path, const Window& wnd)
{
  loadTexture(path, wnd.getRenderer());
}
于 2013-08-31T20:38:16.540 回答