• ベストアンサー
※ ChatGPTを利用し、要約された質問です(原文:非常に多くのパラメータをデータクラスに登録する「楽な」方法は?)

非常に多くのパラメータをデータクラスに登録する「楽な」方法は?

このQ&Aのポイント
  • 500個以上のパラメータをデータクラスに登録する方法についての質問です。
  • ファイルからパラメータ名と初期値を読み込み、自動的にデータクラスに登録したいです。
  • 具体的な実装方法やライブラリなど、簡単に大量のパラメータを登録する方法があれば教えてください。

質問者が選んだベストアンサー

  • ベストアンサー
  • kmee
  • ベストアンサー率55% (1857/3366)
回答No.1

・データが滅多に変わらないなら、 AAA.20 → Data.AAA = 20 ; ..... と変換するプログラムを作って(Perlなどのスクリプトでよいでしょう) #include "data.h" などとして取りこむ。 欠点はデータが変わるたびに再コンパイルが必要。 ・文字列でデータにアクセスできるようにメソッドを用意する。 例えば Data.Set("AAA",20) としたらData.Get("AAA")で20が取り出せるようにする。 実装方法としては、 キーと値の1次元配列やリスト、ハッシュテーブルなど。 欠点は、実装を作るのが少し面倒。 ・既存のライブラリを利用する。 XML形式にして、XML用ライブラリを使う。 INI形式にして、INI用ライブラリを使う、等

aneja
質問者

お礼

さっそくのご回答、どうもありがとうございました。お伝えしてなくてすみませんが、データが変わるたびにコンパイルし直しは、だめだそうです。あと、データファイルはCSV指定だそうです。2番目のお話に関しては、STLのmapに入れようかとも考えたのですが、パラメータを参照するたんびにfindとかとやってたら、速度的に遅くなるかな?と思い、悩んでしまった次第です。でもよく考えたらGetするのと変わんないですかね。今後も参考にさせていただけそうなヒントがたくさんありました。どうもありがとうございました。

aneja
質問者

補足

最初にお伝えしてなくて、すみません。パラメータを変えるたんびにコンパイルし直しはダメだそうです。あと、パラメータファイルはCSV指定だそうです。

その他の回答 (4)

  • yuoke
  • ベストアンサー率53% (8/15)
回答No.5

No.3です セミコロンはマクロで追加するのではなく、 csvのダミーデータで追加した方が、 スジが良かったですね… 重ね重ね申し訳ありませんでした。 例 conv(dmy1,key,val,dmy2); マクロはNo3のまま

aneja
質問者

お礼

さっそくのご回答とご検討、どうもありがとうございます。こちらにまとめて書かせていただきますね。質問通りのことをするにはトークン連結演算子もよさそうですね。初めはこういう方法もちょっと考えたんですが、あまり使い方を知らなくて。教えていただいた方法で勉強してみます。ただデータファイルをインクルードするようですが、今回は要件からはずれてしまいます。どうもありがとうございました。

  • yuoke
  • ベストアンサー率53% (8/15)
回答No.4

No.3です 取り合えずマクロで「;」が抜けてました…申し訳ありません。

  • yuoke
  • ベストアンサー率53% (8/15)
回答No.3

csvの最初と最後にダミーを追加して関数っぽくする。 例 conv(dmy1,aaa,10,dmy2) 次にマクロを使って、必要なクラスに登録できる形に変える 例 #define conv(dmy1,key,val,dmy2) data.##key = val (最近c使ってないので、マクロは間違えてるかも…) 最後にcsvファイルをクラス内 でincludeすれば行けそうな気がします。

  • BuriBuri4
  • ベストアンサー率28% (150/525)
回答No.2

パラメタのタグ("AAA","BBB")と値(10,20)を管理するクラス(構造体でも可) class DataParam { private:  char tag[xx] ;  int val ; public:  Data( ) ;  ~Data( ) ; ... } を作って、リストかハッシュに突っ込んでやれば良い。 ※パラメタを一つのクラスメンバーとして持つのではなくタグと値のセットでデータとして管理すればよい。

aneja
質問者

お礼

さっそくのご回答、どうもありがとうございました。おっしゃるように、リストかハッシュを利用するのがすっきりしそうですね。参考になりました。

関連するQ&A