C++で条件に応じて動的にクラスのインスタンス化する時にさ

■ このスレッドは過去ログ倉庫に格納されています
0001以下、5ちゃんねるからVIPがお送りします2023/05/20(土) 17:45:24.706ID:rYxGYgjR0
IF分でいちいち書いてやったらダメ?

0002以下、5ちゃんねるからVIPがお送りします2023/05/20(土) 17:45:49.800ID:qGtJXrj50
いいよ~

0003以下、5ちゃんねるからVIPがお送りします2023/05/20(土) 17:46:11.881ID:rvFHY7g2d
シングルd

0004以下、5ちゃんねるからVIPがお送りします2023/05/20(土) 17:47:24.184ID:whTXElN1M
動的とは

0005以下、5ちゃんねるからVIPがお送りします2023/05/20(土) 17:48:17.562ID:KfFnmQ1dd
Factoryクラス作れよ

0006以下、5ちゃんねるからVIPがお送りします2023/05/20(土) 17:50:33.749ID:KfFnmQ1dd
適切なデザインパターン使って汎用的に作ればいいだけ
ifでもswitchでもなんでも構わん
重要なのは、どういう実装(設計)にするかだよ

0007以下、5ちゃんねるからVIPがお送りします2023/05/20(土) 17:54:02.632ID:KfFnmQ1dd
>>4
newでインスタンス作るってことだよ
IF的には親クラスで定義しといて、インスタンスは使う目的の子クラスを分岐させて生成する

0008以下、5ちゃんねるからVIPがお送りします2023/05/20(土) 17:55:00.057ID:rYxGYgjR0
複数画面遷移するシステムでメインのコントローラーから現在表示している画面のインスタンスだけを有効にしたい
インスタンスを格納するポインタを1つ用意して、そこに画面のインスタンスのポインタを格納したいんだけど、下みたいなアホ処理でもいいの?


ヘッダー

Test * instance;

ソース

delete instance;
instance == nullptr;

if(id == "Test1") {
instance = new Test1();
} else (id == "Test2") {
instance = new Test2();
}

0009以下、5ちゃんねるからVIPがお送りします2023/05/20(土) 17:55:57.870ID:rCSu1vpN0
ぬるぽ

0010以下、5ちゃんねるからVIPがお送りします2023/05/20(土) 17:56:29.934ID:rYxGYgjR0
各画面はTestクラスを継承しており、問題なくポインタ格納できるものとして

0011以下、5ちゃんねるからVIPがお送りします2023/05/20(土) 17:58:20.101ID:rYxGYgjR0
instance = nullptrの誤り

0012以下、5ちゃんねるからVIPがお送りします2023/05/20(土) 17:59:23.373ID:H9KtQFeM0
😡 inline std::unique_ptr<Test> instance:

0013以下、5ちゃんねるからVIPがお送りします2023/05/20(土) 18:01:34.724ID:whTXElN1M
                    rっ
   >>9 ガッ         ||
            l\.      |.ハ,,ハ   
    \. \.     |_\   ( ゚ω゚ )  
       \ \\     \ \  〉   _二二二つ
         \ \       \ \   /
             \       \_ノ
                    \\
              )(     \\
             ⌒) ゞ      レ

0014以下、5ちゃんねるからVIPがお送りします2023/05/20(土) 18:03:07.292ID:NYAoRzvl0
逆になぜこれをアホみたいだと思うの?

0015以下、5ちゃんねるからVIPがお送りします2023/05/20(土) 18:03:08.372ID:H9KtQFeM0
動くし別にいいんじゃねえの

0016以下、5ちゃんねるからVIPがお送りします2023/05/20(土) 18:03:11.495ID:NfiSr7rOd
>>12
すまん、指摘ありがとう
ちゃんとスマートポインタ使います…

0017以下、5ちゃんねるからVIPがお送りします2023/05/20(土) 18:04:14.079ID:NfiSr7rOd
>>14
150画面くらいあってメイン処理のステップ数が死ぬほど長くなる
優秀なエンジニアはもっとコンパクトにやるんじゃないかと思って…

0018以下、5ちゃんねるからVIPがお送りします2023/05/20(土) 18:10:54.781ID:H9KtQFeM0
>>16
inlineなしでちゃんと動く?
C++最近触ってないから自信ないけどinstanceの実体がなさそう

0019以下、5ちゃんねるからVIPがお送りします2023/05/20(土) 18:11:22.893ID:t7x2oC7T0
継承しまくる

0020以下、5ちゃんねるからVIPがお送りします2023/05/20(土) 18:12:28.071ID:NYAoRzvl0
>>17
つまり、150クラスあるってことでしょ?
それやり方の前に設計見直した方が良くない?
共通化と最適化ができていないよ多分

0021以下、5ちゃんねるからVIPがお送りします2023/05/20(土) 18:12:35.820ID:G9L+9NEz0
マクロ使えばif文が伸びるの防げそうだけどどう思う?

0022以下、5ちゃんねるからVIPがお送りします2023/05/20(土) 18:14:00.874ID:H9KtQFeM0
クラスの数はさておき仮想クラスの基本的な使い方だしここは大丈夫だと思う

0023以下、5ちゃんねるからVIPがお送りします2023/05/20(土) 18:16:30.922ID:G9L+9NEz0
>>21
テンプレートでいいか

0024以下、5ちゃんねるからVIPがお送りします2023/05/20(土) 18:18:24.257ID:NfiSr7rOd
>>20
うわー確かに
言われるまで150クラス作るつもりでいた…
落ち着いて考えれば画面ごとの処理なんて共通しているものが多いし大幅に減らせるな…
システムの新規設計なんて初めてだから根本的な箇所で謝っていた
マジでありがとう
これなら普通に短くできそう

0025以下、5ちゃんねるからVIPがお送りします2023/05/20(土) 18:19:30.440ID:h8GDYQBs0
idとfactoryメソッドをstd::mapで紐づけておけば条件分岐の嵐は一応避けられるかな

0026以下、5ちゃんねるからVIPがお送りします2023/05/20(土) 18:19:50.637ID:whTXElN1M
よかったななんかしらんけど

0027以下、5ちゃんねるからVIPがお送りします2023/05/20(土) 18:20:34.739ID:KfFnmQ1dd
作る前に設計しろ
設計しないからグチャグチャになるんだよ
設計終わったら第三者にレビューしてもらえよ

0028以下、5ちゃんねるからVIPがお送りします2023/05/20(土) 18:20:40.050ID:NfiSr7rOd
あ、スマートポインタ使ってない理由思い出したわ
フレームワーク側で親要素と子要素に分かれてて、親がデストラクトされるタイミングで全ての子要素が消えるからスマートポインタの使用は公式が禁止してたわ

0029以下、5ちゃんねるからVIPがお送りします2023/05/20(土) 18:21:08.318ID:NfiSr7rOd
>>27
ありがとうございます…!

0030以下、5ちゃんねるからVIPがお送りします2023/05/20(土) 18:24:05.036ID:H9KtQFeM0
Qtか

0031以下、5ちゃんねるからVIPがお送りします2023/05/20(土) 18:24:29.828ID:NfiSr7rOd
>>30
なんでわかるんだ凄すぎだろ…

0032以下、5ちゃんねるからVIPがお送りします2023/05/20(土) 18:25:48.242ID:KfFnmQ1dd
Qtはワイも一度やったことあるな
詳細は言えないが何かしらを計測する機械の画面制御で

0033以下、5ちゃんねるからVIPがお送りします2023/05/20(土) 18:26:17.442ID:whTXElN1M
なんとなくわかるよね

0034以下、5ちゃんねるからVIPがお送りします2023/05/20(土) 18:27:19.253ID:h8GDYQBs0
Qtはライセンス関係複雑だから手出せないや

■ このスレッドは過去ログ倉庫に格納されています