[過去ログ] 【初心者歓迎】C/C++室 Ver.106【環境依存OK】 (1002レス)
上下前次1-新
抽出解除 レス栞
このスレッドは過去ログ倉庫に格納されています。
次スレ検索 歴削→次スレ 栞削→次スレ 過去ログメニュー
331(4): 2020/10/31(土)22:42 ID:R+EB1+ZF(1) AAS
外部リンク:ideone.com
上記の44行目の「ここから〜」と70行目の「ここまで」の部分で変数p_aaa、p_bbbのstr変数を書き換えるという同等の処理をしているのですが、
実際のここの部分は何十行もあるので、メンテナンス性を良くするために、この共通部分を共有できないかと考えています。
関数化すればと思いましたが、引数の構造体が別物のため関数化できません。
何か方法はありますでしょうか?
336(1): 2020/11/01(日)10:32 ID:6FKS57jf(1/3) AAS
>>331
テンプレート関数を使って、コードの上では一つの関数に見せかけておくようにする
前準備の箇所も同様
hsgAWF - Online C++0x Compiler & Debugging Tool - Ideone.com
外部リンク:ideone.com
338(1): 331 2020/11/01(日)11:33 ID:caGW9eb5(1) AAS
>>334
関数にp_aaa->strを渡して値の書き換えを考えたのですが、関数内のreallocでアドレス変わるからその値を変えてもだめだ。
って思っていました。
ご提案の通りアドレス変わったものを戻り値で返してあげればいいですね。
その考えが抜けていました。
>>335
すみません、剥いでchar*にすればいいってところがよくわかりませんでした。。
>>336
今回以外のケースでも使いみちありそうなのでテンプレートについて調べてみました。
関数やclassを定義する先頭に<typename T, typename HOGE>のように可変できる独自の型を作れる。
省2
350(3): 331 2020/11/01(日)19:17 ID:tQIBnCrw(1) AAS
>>340
ありがとうございます。勉強になりました。
ついでに追加で質問があります。
最初に投稿したコード →外部リンク:ideone.com
の36〜37行目で値と0x00を入れるのに2行使ってますが、これ以上簡素化はできないですよね?
36: memcpy(p_bbb->str, bbb_str_temp, 9);
37: p_bbb->str[9] = 0x00;
あと54〜56行では3行に分けて1バイトづつセットしてますが、ここを一気に入れる方法はありませんか?
イメージは21行目のcharを初期化するときのように {0x41, 0x41, 0x00} みたいな書き方ができないかなと思っているのですが。
54: p_aaa->str[9] = 0x41;
省2
354: 331 2020/11/02(月)21:24 ID:HalV34XN(1) AAS
>>351
charにキャストして書き込みですか。なるほどですね。
ありがとうございます。
上下前次1-新書関写板覧索設栞歴
スレ情報 赤レス抽出 画像レス抽出 歴の未読スレ AAサムネイル
ぬこの手 ぬこTOP 0.102s