回答編集履歴
6
デストラクタ追加
test
CHANGED
@@ -26,7 +26,7 @@
|
|
26
26
|
|
27
27
|
追記: Entry.hpp の設計について:
|
28
28
|
|
29
|
-
Entry.hpp には「いろいろなクラスで使われる定数・関数(`Entry::GetRand()`や`Entry::LoadSprite()`)」と「ゲーム全体を制御する(?)クラス `class Entry`」が混在しています。これらの役割を別ヘッダに分けるのが循環参照のない理想的な設計です。かといって `Entry::GetRand()`や`Entry::LoadSprite()` が `Entry` クラスに存在する理由もあるでしょうから、一部を
|
29
|
+
Entry.hpp には「いろいろなクラスで使われる定数・関数(`Entry::GetRand()`や`Entry::LoadSprite()`)」と「ゲーム全体を制御する(?)クラス `class Entry`」が混在しています。これらの役割を別ヘッダに分けるのが循環参照のない理想的な設計です。かといって `Entry::GetRand()`や`Entry::LoadSprite()` が `Entry` クラスに存在する理由もあるでしょうから、一部を抽象クラスにしてしまうのが良いと思います。おおまかな例:
|
30
30
|
|
31
31
|
|
32
32
|
|
@@ -45,6 +45,8 @@
|
|
45
45
|
class Entry {
|
46
46
|
|
47
47
|
public:
|
48
|
+
|
49
|
+
virtual ~Entry() {}
|
48
50
|
|
49
51
|
virtual int GetRand(int start, int end) = 0;
|
50
52
|
|
@@ -68,7 +70,7 @@
|
|
68
70
|
|
69
71
|
EntryImpl();
|
70
72
|
|
71
|
-
~EntryImpl();
|
73
|
+
~EntryImpl() override;
|
72
74
|
|
73
75
|
|
74
76
|
|
5
typo
test
CHANGED
@@ -26,7 +26,7 @@
|
|
26
26
|
|
27
27
|
追記: Entry.hpp の設計について:
|
28
28
|
|
29
|
-
Entry.hpp には「いろいろなクラスで使われる定数・関数(`Entry::GetRand()`や`Entry::LoadSprite()`)」と「ゲーム全体を制御する(?)クラス `class Entry`」が混在しています。これらの役割を別ヘッダに分けるのが循環参照のない理想的な設計です。かといって `Entry::GetRand()`や`Entry::LoadSprite()` が `Entry` クラスに存在する理由もあるでしょうから、一部をインターフェイスな`class`にしてしまうのが
|
29
|
+
Entry.hpp には「いろいろなクラスで使われる定数・関数(`Entry::GetRand()`や`Entry::LoadSprite()`)」と「ゲーム全体を制御する(?)クラス `class Entry`」が混在しています。これらの役割を別ヘッダに分けるのが循環参照のない理想的な設計です。かといって `Entry::GetRand()`や`Entry::LoadSprite()` が `Entry` クラスに存在する理由もあるでしょうから、一部をインターフェイスな`class`にしてしまうのが良いと思います。おおまかな例:
|
30
30
|
|
31
31
|
|
32
32
|
|
4
文言
test
CHANGED
@@ -26,7 +26,7 @@
|
|
26
26
|
|
27
27
|
追記: Entry.hpp の設計について:
|
28
28
|
|
29
|
-
Entry.hpp には「いろいろなクラスで使われる定数・関数(`Entry::GetRand()`や`Entry::LoadSprite()`)」と「ゲーム全体を制御する(?)クラス `class Entry`」が混在しています。これらの役割を別ヘッダに分けるのが循環参照のない理想的な設計です。かといって `Entry::GetRand()`や`Entry::LoadSprite()` が `Entry` クラスに存在する理由もあるでしょうから、
|
29
|
+
Entry.hpp には「いろいろなクラスで使われる定数・関数(`Entry::GetRand()`や`Entry::LoadSprite()`)」と「ゲーム全体を制御する(?)クラス `class Entry`」が混在しています。これらの役割を別ヘッダに分けるのが循環参照のない理想的な設計です。かといって `Entry::GetRand()`や`Entry::LoadSprite()` が `Entry` クラスに存在する理由もあるでしょうから、一部をインターフェイスな`class`にしてしまうのが使うのが良いと思います。おおまかな例:
|
30
30
|
|
31
31
|
|
32
32
|
|
3
#include
test
CHANGED
@@ -60,6 +60,10 @@
|
|
60
60
|
|
61
61
|
```c++
|
62
62
|
|
63
|
+
#include "Entry.hpp"
|
64
|
+
|
65
|
+
|
66
|
+
|
63
67
|
class EntryImpl : public Entry {
|
64
68
|
|
65
69
|
EntryImpl();
|
2
pimpl
test
CHANGED
@@ -16,8 +16,80 @@
|
|
16
16
|
|
17
17
|
|
18
18
|
|
19
|
-
----
|
19
|
+
----
|
20
20
|
|
21
21
|
|
22
22
|
|
23
23
|
毎回 Entry.hpp が問題を起こしていますが、「Entry.hpp からは他のヘッダをインクルードするのは避ける。前方宣言で済ませる」と「ヘッダからEntry.hppをインクルードするのを避ける。可能なら前方宣言で済ませる」でだいたい解消すると思います。
|
24
|
+
|
25
|
+
|
26
|
+
|
27
|
+
追記: Entry.hpp の設計について:
|
28
|
+
|
29
|
+
Entry.hpp には「いろいろなクラスで使われる定数・関数(`Entry::GetRand()`や`Entry::LoadSprite()`)」と「ゲーム全体を制御する(?)クラス `class Entry`」が混在しています。これらの役割を別ヘッダに分けるのが循環参照のない理想的な設計です。かといって `Entry::GetRand()`や`Entry::LoadSprite()` が `Entry` クラスに存在する理由もあるでしょうから、「pimplイディオム」を使うのが良いと思います。おおまかな例:
|
30
|
+
|
31
|
+
|
32
|
+
|
33
|
+
Entry.hpp (いろいろなクラスから使うのはこのヘッダ。.cpp は不要。)
|
34
|
+
|
35
|
+
```c++
|
36
|
+
|
37
|
+
|
38
|
+
|
39
|
+
#define CELL ((int)48)
|
40
|
+
|
41
|
+
...
|
42
|
+
|
43
|
+
|
44
|
+
|
45
|
+
class Entry {
|
46
|
+
|
47
|
+
public:
|
48
|
+
|
49
|
+
virtual int GetRand(int start, int end) = 0;
|
50
|
+
|
51
|
+
virtual int LoadSprite(const char* FileName) = 0;
|
52
|
+
|
53
|
+
};
|
54
|
+
|
55
|
+
```
|
56
|
+
|
57
|
+
|
58
|
+
|
59
|
+
EntryImpl.hpp (ゲーム全体の制御はこれ)
|
60
|
+
|
61
|
+
```c++
|
62
|
+
|
63
|
+
class EntryImpl : public Entry {
|
64
|
+
|
65
|
+
EntryImpl();
|
66
|
+
|
67
|
+
~EntryImpl();
|
68
|
+
|
69
|
+
|
70
|
+
|
71
|
+
void Update();
|
72
|
+
|
73
|
+
void Draw();
|
74
|
+
|
75
|
+
|
76
|
+
|
77
|
+
int GetRand(int start, int end) override;
|
78
|
+
|
79
|
+
int LoadSprite(const char* FileName) overide;
|
80
|
+
|
81
|
+
|
82
|
+
|
83
|
+
std::shared_ptr<Input> InputKey;
|
84
|
+
|
85
|
+
|
86
|
+
|
87
|
+
private:
|
88
|
+
|
89
|
+
std::shared_ptr<Game_Scene> game;
|
90
|
+
|
91
|
+
Scene_Type type;
|
92
|
+
|
93
|
+
};
|
94
|
+
|
95
|
+
```
|
1
Entry.hppに関する方針
test
CHANGED
@@ -13,3 +13,11 @@
|
|
13
13
|
|
14
14
|
|
15
15
|
のどちらかでいいと思います。
|
16
|
+
|
17
|
+
|
18
|
+
|
19
|
+
----
|
20
|
+
|
21
|
+
|
22
|
+
|
23
|
+
毎回 Entry.hpp が問題を起こしていますが、「Entry.hpp からは他のヘッダをインクルードするのは避ける。前方宣言で済ませる」と「ヘッダからEntry.hppをインクルードするのを避ける。可能なら前方宣言で済ませる」でだいたい解消すると思います。
|