回答編集履歴

6

デストラクタ追加

2021/02/26 02:34

投稿

int32_t
int32_t

スコア21679

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` クラスに存在する理由もあるでしょうから、一部を抽象クラスにしてしまうのが良いと思います。おおまかな例:
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

2021/02/26 02:34

投稿

int32_t
int32_t

スコア21679

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

文言

2021/02/26 01:44

投稿

int32_t
int32_t

スコア21679

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` クラスに存在する理由もあるでしょうから、「pimplイディオム」を使うのが良いと思います。おおまかな例:
29
+ Entry.hpp には「いろいろなクラスで使われる定数・関数(`Entry::GetRand()`や`Entry::LoadSprite()`)」と「ゲーム全体を制御する(?)クラス `class Entry`」が混在しています。これらの役割を別ヘッダに分けるのが循環参照のない理想的な設計です。かといって `Entry::GetRand()`や`Entry::LoadSprite()` が `Entry` クラスに存在する理由もあるでしょうから、一部をインターフェイスな`class`にしてしまうのが使うのが良いと思います。おおまかな例:
30
30
 
31
31
 
32
32
 

3

#include

2021/02/26 01:43

投稿

int32_t
int32_t

スコア21679

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

2021/02/26 01:33

投稿

int32_t
int32_t

スコア21679

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に関する方針

2021/02/26 01:15

投稿

int32_t
int32_t

スコア21679

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をインクルードするのを避ける。可能なら前方宣言で済ませる」でだいたい解消すると思います。