回答編集履歴

2

見せ消しの訂正です。

2020/06/28 15:37

投稿

anndonut
anndonut

スコア667

test CHANGED
@@ -1,8 +1,8 @@
1
- ~~シングルトンパターンを適用すると初期化を1回に抑えることができます。
1
+ ~~シングルトンパターンを適用すると初期化を1回に抑えることができます。~~
2
2
 
3
3
 
4
4
 
5
- [シングルトンのベターな実装方法](https://qiita.com/kikuuuty/items/fcf5f7df2f0493c437dc)~~
5
+ ~~[シングルトンのベターな実装方法](https://qiita.com/kikuuuty/items/fcf5f7df2f0493c437dc)~~
6
6
 
7
7
 
8
8
 

1

グローバル関数、変数によるコードを追記

2020/06/28 15:37

投稿

anndonut
anndonut

スコア667

test CHANGED
@@ -1,5 +1,127 @@
1
- シングルトンパターンを適用すると初期化を1回に抑えることができます。
1
+ ~~シングルトンパターンを適用すると初期化を1回に抑えることができます。
2
2
 
3
3
 
4
4
 
5
- [シングルトンのベターな実装方法](https://qiita.com/kikuuuty/items/fcf5f7df2f0493c437dc)
5
+ [シングルトンのベターな実装方法](https://qiita.com/kikuuuty/items/fcf5f7df2f0493c437dc)~~
6
+
7
+
8
+
9
+ [追記] 自分なりに不細工なコードを書いてみました。
10
+
11
+
12
+
13
+ ```C++
14
+
15
+ #include <iostream>
16
+
17
+ #include <vector>
18
+
19
+ #include <map>
20
+
21
+ #include <string>
22
+
23
+
24
+
25
+ static std::vector<std::string> getPaths(size_t typeHash, const std::string typeName, const std::string path) {
26
+
27
+ static std::map<std::size_t, std::vector<std::string>> m;
28
+
29
+ if (m.count(typeHash) == 0) {
30
+
31
+ std::cout << "DEBUG: 呼び出されたよん" << std::endl;
32
+
33
+ std::vector<std::string> v;
34
+
35
+ v.push_back(std::string() + typeName + "の" + path + "でなんか適当なやつ1");
36
+
37
+ v.push_back(std::string() + typeName + "の" + path + "でなんか適当なやつ2");
38
+
39
+ v.push_back(std::string() + typeName + "の" + path + "でなんか適当なやつ3");
40
+
41
+ m.insert(std::make_pair(typeHash, v));
42
+
43
+ }
44
+
45
+ return m[typeHash];
46
+
47
+ }
48
+
49
+
50
+
51
+ class Base {
52
+
53
+ protected:
54
+
55
+ std::vector<std::string> paths;
56
+
57
+
58
+
59
+ public:
60
+
61
+ Base(size_t typeHash, std::string typeName, std::string path) {
62
+
63
+ paths = getPaths(typeHash, typeName, path);
64
+
65
+ };
66
+
67
+
68
+
69
+ void printPaths() {
70
+
71
+ for (auto p: paths)
72
+
73
+ std::cout << p << std::endl;
74
+
75
+ };
76
+
77
+ };
78
+
79
+
80
+
81
+ class A : public Base {
82
+
83
+ public: A() : Base(typeid(this).hash_code(), typeid(this).name(), std::string("Path1")) { };
84
+
85
+ };
86
+
87
+ class B : public Base {
88
+
89
+ public: B() : Base(typeid(this).hash_code(), typeid(this).name(), std::string("Path2")) { };
90
+
91
+ };
92
+
93
+
94
+
95
+
96
+
97
+ int main() {
98
+
99
+ {
100
+
101
+ A a;
102
+
103
+ a.printPaths();
104
+
105
+ }
106
+
107
+ {
108
+
109
+ B b;
110
+
111
+ b.printPaths();
112
+
113
+ }
114
+
115
+ {
116
+
117
+ A a;
118
+
119
+ a.printPaths();
120
+
121
+ }
122
+
123
+ return 0;
124
+
125
+ }
126
+
127
+ ```