トップページ > プログラム > 2015年09月16日 > sRYuFuHf

書き込み順位&時間帯一覧

13 位/142 ID中時間01234567891011121314151617181920212223Total
書き込み数0000000000000000000002204



使用した名前一覧書き込んだスレッド一覧
デフォルトの名無しさん
くだすれC++/CLI(初心者用)part2

書き込みレス一覧

くだすれC++/CLI(初心者用)part2
924 :デフォルトの名無しさん[sage]:2015/09/16(水) 21:00:32.05 ID:sRYuFuHf
>>923
おお、ありがとうございます。
template<typename ... Ts>でTsはバラバラでもいけるんですね。知りませんでした。
あと、再帰で一つずつ剥がすのも思いついていませんでした。ググルと定番のようですがorz

> 書いてて思ったけど、変に凝るよりも↓みたいな奴の方が読む人にやさしい…
ちなみにその記述は今の状態です。
ただ、これだと抽象度が低いため記述量が増え、ちょっと保守性に問題を生じ始めています。
結局のところ、同じフォーマットの行を大量に処理して配列に突っ込むだけなので、
最終的には「ファイル名」「フォーマット」「対象配列」でよく、最上位からは(型情報ありなら)

parse_csv(filename, &ary0, &ary1, ...);

の1行にしたいのです。その下のファイル→行のところでコメント等をはがし、
delegateでparse_lineを呼ぶ算段でしたが、ポインタが渡せずに困っていました。
大変助かりました。ありがとうございました。


と思ったのですが、parameter pack はC++11の機能で、VS2013以降からのようです、、、
VS2015でそちらのコードが動作するのを確認しました。
自分が使っているのはVC++2008なので、この機会に移行を考えますorz
当面はせいぜい10個なのでunpackしたものを自分で書きますが、、、
くだすれC++/CLI(初心者用)part2
925 :デフォルトの名無しさん[sage]:2015/09/16(水) 21:06:19.21 ID:sRYuFuHf
すいません、やや話が前後しているので念のため一部訂正します。

元々 delegate から parse_line を呼ぶつもりでしたが、
最終的には可能なら parse_csv に纏めようとしています。
ただ parameter pack が使えないとやっぱキツいですね、、、
くだすれC++/CLI(初心者用)part2
927 :デフォルトの名無しさん[sage]:2015/09/16(水) 22:41:51.71 ID:sRYuFuHf
>>926
はい、ファイルによってフォーマットは違い、行では変わりません。
演算ソースを読み込むのに使うので、速度は遅くても構いません。

ただ一部、各行の先頭数値によって行のフォーマットを変えている部分があるため、
元々はメンバ関数内で parse_file を呼び、フォーマット毎の parse_line を delegate で渡すつもりでした。
ただこれはソースファイルが増えるのが面倒なので一部にパッチを当てたからであり、
きちんと修正すれば parse_file に一本化できるので、この方向で検討中です。

実は縦方向の配列は不要で、各行での構造体化も検討中です。
くだすれC++/CLI(初心者用)part2
928 :デフォルトの名無しさん[sage]:2015/09/16(水) 22:55:17.14 ID:sRYuFuHf
すいません、また細かいところで間違えました。一応念のため訂正しておきます。

× 元々はメンバ関数内で parse_file を呼び、フォーマット毎の parse_line を delegate で渡すつもりでした。
○ 元々は上位で parse_file を呼び、対象オブジェクトのメンバ関数を delegate で渡し、
 メンバ関数内で先頭数値を見てフォーマットを区別し、そこから parse_line を呼ぶつもりでした。(現時点で動作中)

今は上位で メンバ関数 Hoge.init(filename) を呼び、init内で全部済ませる方向です。

これまで全くオブジェクト指向をしておらず、それでも大して問題なかったのですが、
いい加減無理になってきたので、今更ながら粗結合化をやろうかというところです。


※このページは、『2ちゃんねる』の書き込みを基に自動生成したものです。オリジナルはリンク先の2ちゃんねるの書き込みです。
※このサイトでオリジナルの書き込みについては対応できません。
※何か問題のある場合はメールをしてください。対応します。