我正在进行桌面游戏。桌面游戏有一个类Board
,其中包含QList<Tile*>
。 Tile
是一个抽象类,它有许多子类来指示不同类型的tile,它们具有不同的功能。现在,由于Board
的构造函数需要将这些子类的所有对象放入QList<Tile*>
,我是否需要在Board
中包含每个子类?
如果是这样,我很确定这是不好的做法,那么有没有办法绕过这个?
答案 0 :(得分:1)
我是否需要在Board中包含每个子类?
如果您尝试使用子类,则必须包含它。我觉得这里没有什么可以绕过的。
如果需要在多个地方完成,即不仅仅是在构造函数中,那么你可以做的一件事就是将包含放入共享的包含中。然后,几个地方将包括共享包含。
例如,遗憾的是,Qt最终用户包括整个模块以避免几行包含。恕我直言,这是不好的做法。
以下是您案例的示例。
#include "test.h"
#include "foo.h"
#include "bar.h"
#include "baz.h"
int main()
{
Test *test1 = new Foo();
Test *test2 = new Bar();
Test *test3 = new Baz();
return 0;
}
#ifndef TEST
#define TEST
class Test
{
public:
virtual ~Test() {}
};
#endif
#ifndef FOO
#define FOO
#include "test.h"
class Foo : public Test
{
};
#endif
#ifndef BAR
#define BAR
#include "test.h"
class Bar : public Test
{
};
#endif
#ifndef BAZ
#define BAZ
#include "test.h"
class Baz : public Test
{
};
#endif
TEMPLATE = app
TARGET = main
CONFIG -= qt
QT -= core gui
HEADERS += bar.h baz.h foo.h test.h
SOURCES += main.cpp
qmake && make && ./main
尝试删除任何包含或用main.cpp
文件中的forward声明替换它,您将看到它不再编译。