- ベストアンサー
非常に多くのパラメータをデータクラスに登録する「楽な」方法は?
- 500個以上のパラメータをデータクラスに登録する方法についての質問です。
- ファイルからパラメータ名と初期値を読み込み、自動的にデータクラスに登録したいです。
- 具体的な実装方法やライブラリなど、簡単に大量のパラメータを登録する方法があれば教えてください。
- みんなの回答 (5)
- 専門家の回答
質問者が選んだベストアンサー
・データが滅多に変わらないなら、 AAA.20 → Data.AAA = 20 ; ..... と変換するプログラムを作って(Perlなどのスクリプトでよいでしょう) #include "data.h" などとして取りこむ。 欠点はデータが変わるたびに再コンパイルが必要。 ・文字列でデータにアクセスできるようにメソッドを用意する。 例えば Data.Set("AAA",20) としたらData.Get("AAA")で20が取り出せるようにする。 実装方法としては、 キーと値の1次元配列やリスト、ハッシュテーブルなど。 欠点は、実装を作るのが少し面倒。 ・既存のライブラリを利用する。 XML形式にして、XML用ライブラリを使う。 INI形式にして、INI用ライブラリを使う、等
その他の回答 (4)
- yuoke
- ベストアンサー率53% (8/15)
No.3です セミコロンはマクロで追加するのではなく、 csvのダミーデータで追加した方が、 スジが良かったですね… 重ね重ね申し訳ありませんでした。 例 conv(dmy1,key,val,dmy2); マクロはNo3のまま
お礼
さっそくのご回答とご検討、どうもありがとうございます。こちらにまとめて書かせていただきますね。質問通りのことをするにはトークン連結演算子もよさそうですね。初めはこういう方法もちょっと考えたんですが、あまり使い方を知らなくて。教えていただいた方法で勉強してみます。ただデータファイルをインクルードするようですが、今回は要件からはずれてしまいます。どうもありがとうございました。
- yuoke
- ベストアンサー率53% (8/15)
No.3です 取り合えずマクロで「;」が抜けてました…申し訳ありません。
- yuoke
- ベストアンサー率53% (8/15)
csvの最初と最後にダミーを追加して関数っぽくする。 例 conv(dmy1,aaa,10,dmy2) 次にマクロを使って、必要なクラスに登録できる形に変える 例 #define conv(dmy1,key,val,dmy2) data.##key = val (最近c使ってないので、マクロは間違えてるかも…) 最後にcsvファイルをクラス内 でincludeすれば行けそうな気がします。
- BuriBuri4
- ベストアンサー率28% (150/525)
パラメタのタグ("AAA","BBB")と値(10,20)を管理するクラス(構造体でも可) class DataParam { private: char tag[xx] ; int val ; public: Data( ) ; ~Data( ) ; ... } を作って、リストかハッシュに突っ込んでやれば良い。 ※パラメタを一つのクラスメンバーとして持つのではなくタグと値のセットでデータとして管理すればよい。
お礼
さっそくのご回答、どうもありがとうございました。おっしゃるように、リストかハッシュを利用するのがすっきりしそうですね。参考になりました。
お礼
さっそくのご回答、どうもありがとうございました。お伝えしてなくてすみませんが、データが変わるたびにコンパイルし直しは、だめだそうです。あと、データファイルはCSV指定だそうです。2番目のお話に関しては、STLのmapに入れようかとも考えたのですが、パラメータを参照するたんびにfindとかとやってたら、速度的に遅くなるかな?と思い、悩んでしまった次第です。でもよく考えたらGetするのと変わんないですかね。今後も参考にさせていただけそうなヒントがたくさんありました。どうもありがとうございました。
補足
最初にお伝えしてなくて、すみません。パラメータを変えるたんびにコンパイルし直しはダメだそうです。あと、パラメータファイルはCSV指定だそうです。