C++で条件に応じて動的にクラスのインスタンス化する時にさ
■ このスレッドは過去ログ倉庫に格納されています
適切なデザインパターン使って汎用的に作ればいいだけ
ifでもswitchでもなんでも構わん
重要なのは、どういう実装(設計)にするかだよ >>4
newでインスタンス作るってことだよ
IF的には親クラスで定義しといて、インスタンスは使う目的の子クラスを分岐させて生成する 複数画面遷移するシステムでメインのコントローラーから現在表示している画面のインスタンスだけを有効にしたい
インスタンスを格納するポインタを1つ用意して、そこに画面のインスタンスのポインタを格納したいんだけど、下みたいなアホ処理でもいいの?
ヘッダー
Test * instance;
ソース
delete instance;
instance == nullptr;
if(id == "Test1") {
instance = new Test1();
} else (id == "Test2") {
instance = new Test2();
} 各画面はTestクラスを継承しており、問題なくポインタ格納できるものとして 😡 inline std::unique_ptr<Test> instance: rっ
>>9 ガッ ||
l\. |.ハ,,ハ
\. \. |_\ ( ゚ω゚ )
\ \\ \ \ 〉 _二二二つ
\ \ \ \ /
\ \_ノ
\\
)( \\
⌒) ゞ レ >>12
すまん、指摘ありがとう
ちゃんとスマートポインタ使います… >>14
150画面くらいあってメイン処理のステップ数が死ぬほど長くなる
優秀なエンジニアはもっとコンパクトにやるんじゃないかと思って… >>16
inlineなしでちゃんと動く?
C++最近触ってないから自信ないけどinstanceの実体がなさそう >>17
つまり、150クラスあるってことでしょ?
それやり方の前に設計見直した方が良くない?
共通化と最適化ができていないよ多分 マクロ使えばif文が伸びるの防げそうだけどどう思う? クラスの数はさておき仮想クラスの基本的な使い方だしここは大丈夫だと思う >>20
うわー確かに
言われるまで150クラス作るつもりでいた…
落ち着いて考えれば画面ごとの処理なんて共通しているものが多いし大幅に減らせるな…
システムの新規設計なんて初めてだから根本的な箇所で謝っていた
マジでありがとう
これなら普通に短くできそう idとfactoryメソッドをstd::mapで紐づけておけば条件分岐の嵐は一応避けられるかな 作る前に設計しろ
設計しないからグチャグチャになるんだよ
設計終わったら第三者にレビューしてもらえよ あ、スマートポインタ使ってない理由思い出したわ
フレームワーク側で親要素と子要素に分かれてて、親がデストラクトされるタイミングで全ての子要素が消えるからスマートポインタの使用は公式が禁止してたわ Qtはワイも一度やったことあるな
詳細は言えないが何かしらを計測する機械の画面制御で ■ このスレッドは過去ログ倉庫に格納されています