#7
by Dixq (管理人) » 6年前
たいちうさんの質問と並行してご回答頂けると幸いです。
コンストラクタで直に代入していたら、それは確かに変更が効きませんよね。
パラメータの定義を内部に持ちたいということであれば、このような実装はどうですか?
Enemyクラスの中にパラメータクラスを定義し、そのパラメータIDをセットするような実装です。
コード:
class Enemy {
public:
class Param {
public:
int a, b, c;
};
Enemy(int id) {
_prm = _param[id];
}
private:
const static Param _param[10];
Param _prm;
};
Enemy::Param _param[10] = {
{ 1,2,3 },
{ 2,2,3 },//←これがセットされる
{ 3,2,3 },
{ 4,2,3 },
{ 5,2,3 },
{ 6,2,3 },
{ 7,2,3 },
{ 8,2,3 },
{ 9,2,3 },
{ 0,2,3 },
};
int main() {
Enemy enemy(1);
}
もし全てのパラメータをバラバラに設定したいのであれば、
Builderパターンを適用するか、それぞれのパラメータをセットするセッターを実装するしかないでしょう。
> ステータスの設定にshared_ptrというワードについてあまりピンと来ていないようですが
shared_ptrというのはメモリの解放を自動でやってくれるガベージコレクションのような機能であり、パラメータの設定とは話している次元が違うものです。
なお、shared_ptrにはnewではなくmake_sharedキーワードを利用します。
たいちうさんの質問と並行してご回答頂けると幸いです。
コンストラクタで直に代入していたら、それは確かに変更が効きませんよね。
パラメータの定義を内部に持ちたいということであれば、このような実装はどうですか?
Enemyクラスの中にパラメータクラスを定義し、そのパラメータIDをセットするような実装です。
[code]class Enemy {
public:
class Param {
public:
int a, b, c;
};
Enemy(int id) {
_prm = _param[id];
}
private:
const static Param _param[10];
Param _prm;
};
Enemy::Param _param[10] = {
{ 1,2,3 },
{ 2,2,3 },//←これがセットされる
{ 3,2,3 },
{ 4,2,3 },
{ 5,2,3 },
{ 6,2,3 },
{ 7,2,3 },
{ 8,2,3 },
{ 9,2,3 },
{ 0,2,3 },
};
int main() {
Enemy enemy(1);
}[/code]
もし全てのパラメータをバラバラに設定したいのであれば、
Builderパターンを適用するか、それぞれのパラメータをセットするセッターを実装するしかないでしょう。
> ステータスの設定にshared_ptrというワードについてあまりピンと来ていないようですが
shared_ptrというのはメモリの解放を自動でやってくれるガベージコレクションのような機能であり、パラメータの設定とは話している次元が違うものです。
なお、shared_ptrにはnewではなくmake_sharedキーワードを利用します。