どう書くべきかで悩んでいるので、
C 言語の有識者の方
教えてください。
struct _operation {
int id;
void (*execute)();
};
struct log {
int employeeId;
operation* logic; // ログイン時に選択することでセットされる
}
で、かなり端折ってますが、以下のような動きをする訳です。
void main() {
struct log* l = login();
l->logic->execute(); // ログイン時に選択された処理が動く
何やら共通性の高い処理です
logout(l);
}
で、こう書くと、operation の execute 内で、log の employeeId や logic の id を知るためには、以下のようにするしかないような気がする訳です。
l->logic->execute(l);
結局、無駄な抵抗をせずに、以下のように書く方が良いのでしょうか?
struct log {
int employeeId;
int logicId;
}
void main() {
struct log* l = login();
switch (logicId) {
case 0: Hoge1Logic(l);
case 1: Hoge2Logic(l);
case 2: Hoge3Logic(l);
default: ShowError();
}
logout(l);
}
関数ポインタで配列使うとか、その辺のテクニックはあると思うのですが、あくまでもデザパタ的な要素を含んだオブ脳を意識して書いて上記のように壁にぶち当たりながら先に進むべきか、C 言語なんだから素直に構造化プログラミングに徹するべきなのかで悩んでいます。
いろいろな概念を知ってしまうと、素直に書くのが辛くなってくるという言うことで、こんな質問をさせていただきました。