首先我要说的是,我理解“静态类”不是C ++中使用的东西,但我认为该类所持有的所有信息都应该是静态的。我试图了解是否有更好的方法来解决我的问题。
示例:我正在构建一个类来维护游戏window
的信息,因此我可以访问当前window
的{{1}}和{{ 1}}来自对象的任何实例。当我调整大小,最小化,最大化等时,将编辑此类。我的视频游戏将永远不会有两个单独的窗口,只有单独的实例,它们都应包含相同的数据。这就是我所拥有的:
window.h中
width
Window.cpp
height
使用此方法,我可以从对象的任何实例中检索class Window {
static int width;
static int height;
public:
Window();
Window(int width, int height);
static int getWindowWidth();
static int getWindowHeight();
}
的{{1}}及其#include "Window.h"
int Window::width = 0;
int Window::height = 0;
Window::Window( ) { }
Window::Window(int window_width, int window_height) {
width = window_width;
height = window_height;
SDL_CreateWindow( "Window",
SDL_WINDOWPOS_UNDEFINED,
SDL_WINDOWPOS_UNDEFINED,
width,
height,
SDL_WINDOW_OPENGL | SDL_WINDOW_RESIZABLE | SDL_WINDOW_SHOWN
);
}
int getWindowWidth() {
return width;
}
int getWindowHeight() {
return height;
}
。
然而,它感觉不正确(或优雅),因为使用此方法,我现在必须将每个变量列为window
,并且每个变量都必须在我width
之外的地方启动height
代码(因为您不应该在C ++中使用静态类)。
如何在不创建静态类的情况下从多个实例访问static
的信息?
提前致谢
答案 0 :(得分:3)
您似乎对静态变量一无所知,因为这个问题没有意义。共享静态信息的方式是将变量声明为静态!这确保了无论您创建的类的实例数是多少,都只存在一个变量。
你要找的是一个单身人士,因为你只有一个窗口。为此,请将其添加到您的班级:
class Window {
Window(int width, int height);
int width;
int height;
public:
static Window& getInstance();
int getWidth() const {return width;}
int getHeight() const {return height;}
}
static Window::Window& getInstance()
{
static Window instance;
return instance;
}
每当您需要一个窗口时,您将使用getInstance()函数获取它。这将确保在程序生命周期中只存在一个窗口。