No.8ベストアンサー
- 回答日時:
動的な変数はたま~~~に欲しくなったりするんですが…。
本来の意味での変数とは少し違いますが、私の場合は添字参照演算子を使った擬似変数クラスを使います。
(簡単にint変数とします)
-----------
class CVirVar {
public:
int & operator[](char* szVarName) {
// 変数を探し出しす
return 見つけた変数;
}
}
-----------
用法
-----------
CVirVar var;
int a;
char name[] = "ほげ";
var[name] = 1;
a = var[name];
-----------
_variant_tとかで扱うとエラーも返せるし色んな型が格納できるので、一度作っておくと便利(?)ですよ。
テンプレートクラスを使用すると、型名の予測が出来ないので
結局コーディングしないといけませんでしたが
この方法だと色々できそう?だと思いました。
参考になります。ありがとうございました。
No.9
- 回答日時:
「静的に」, つまり「コンパイル時に変数が決定している」のであれば #2 の「ソースコードジェネレータ」とか #4 の「テンプレートファイル」のような方法でできます.
「動的に」, つまり「プログラムを実行している最中に変数を宣言する」ということであれば不可能です. C でも C++ でも「変数はソースコード上で使う前に宣言されている」必要があります.
なお, Lisp や Perl などのように「動的に変数を宣言できる」言語もありますが, その変数管理の本質は「シンボルテーブル」です. つまり連想配列.
回答ありがとうございます。
実際に変数「名」は変える必要すらないことがよくわかりました。
良く考えると結局中身を動的に管理させたかっただけだということに気付けました。
様々な回答を頂きありがとうございました。
参考になった回答はたくさんありますが、質問の趣旨に合った回答に点数をつけたいと思います。
No.7
- 回答日時:
状況によりけりですが、テンプレートファイルを使用することは偶にあったりする。
データベースのテーブル毎のフィールド定義ファイル(構造体)と
アクセス用クラスを多重継承(デザパタ:ブリッジ)させて
そのテーブルアクセス用クラスを作ったりするときなんかに
テーブル情報からフィールド名/属性など読み込んで
テンプレートファイルを利用し、自動でフィールド定義ファイルを
つくるなんてことを過去にした。
利点としては、デバッガでトレースがしやすい。(動的だと少し面倒)
自動で作るので、タイプミス等のエラーが減る。
記述量がけっこう減る。
ADOなんかの場合でいうと
CString strWork = (LPCTSTR)(_bstr_t)m_rs->Fields->GetItem('ほにゃらら')->Value ;
が
CString strWork = m_rs->m_ほにゃらら ;
になんかになる。。。
返事が大変遅れてしまい、申し訳ありません。
私の知識が足りなかったため、回答の説明がわからなかったので勉強してきました。
まだよくわかっていませんが、テンプレートを使用したアイデアとして覚えておこうと思います。
ありがとうございました。
No.5
- 回答日時:
う~ん, ソースコード中で「本物の変数」として存在する必要があるのかどうかよくわからないんですが, まず最初に検討するのは std
::map かなぁ....回答ありがとうございます。
途中でTacosan様が言われたことを理解できました。
前の例で言いますと、画像管理クラスへのポインタと画像を識別する定数をmapコンテナで管理……という感じでマネージャクラスを作ることにしました。
問題は解決できましたが、私の質問の処理が実装できると何かと便利だと考えていますので、一時はこの質問を締め切らないようにしたいと思います。
ありがとうございました。
No.4
- 回答日時:
質問がなんとなくわかりました。
。。自分がやるとすると、テンプレート用のファイルをつくり、文字列置換ソフトを使ったり、自分で置換スクリプト作ったりするかな?
変数は↓みたいな感じで、、、
int @@@変数1@@@ ;
char @@@変数2@@@[10] ;
遅くなりましたが、回答ありがとうございます。
意固地になっているのかもしれませんが、テンプレート用のファイルを作って文字を置換して使うというのは馴染めません……。
何とかプログラミングでやりたい、というのが感想でした。
(もし、YEND77様の言っている事と意味が違う場合は申し訳ありません)
しかし、実際にはこのような手法はままあるようですね。
ソースを見やすく整理するためにも使ってみたいと思います。
ありがとうございました。
No.3
- 回答日時:
(ご参考までに、、、)
基本的にcの場合、固定の変数名でも、コンパイルされた後のバイナリファイルには
変数名は残っていません。
(内部的にはアドレスでしかないorレジスタのみ)
c#なんかの場合は、CLRなんでバイナリ中に変数名とかみれたかと思うけど・・・
もしかしたらマネージドなc++ならできるかもしれない???
その場合リフレクションとかその辺のキーワードで探せばでてくるかもね。。。
回答ありがとうございます。
リフレクションについてですが、
http://msdn.microsoft.com/ja-jp/library/y0114hz2 …
http://oshiete.nikkeibp.co.jp/kotaeru.php3?qid=2 …
を見た限りですと、実行時にメソッドを変更するという方法で間違いは無いでしょうか?
もしそうですと、少し私のやりたいことと違う気がします。
例えば、表示する画像が三枚あったとしましょう。
表示させました。
続いて、もう一枚画像を追加したいとします。
ここで普通であれば、リソースを管理している部分に
ファイル名を使用し新しい変数の宣言、描画関数の呼び出しを追加しますよね。
しかし、もし変数名を動的に管理できるのであれば
描画関数の呼び出しを追加するだけで良くなります。
ソースと画像名との整合性が合わない場合はコンパイルエラーとなるでしょうし、とても便利だと考えています。
No.2
- 回答日時:
それをプログラミングないで使用して何が起こるのでしょう?
変数名は通常はコンパイル時に消去されます。
なので、どんな名前をつけたとしても実行ファイル内で使用されることはありません。(デバッグモードでコンパイルすればある程度は残るかもしれませんが・・・)
単にソースファイルにその変数名を使用したいだけであればそういうソースジェネレータのようなものを作れば良いので・・・
回答ありがとうございます。
例えば、リソースを管理する際に、リソースを保持する変数名とリソース名を外部テキストファイルで管理出来ればすごく便利なので、その方法を探しているのです。
ソースジェネレータというヒントで現在調べている途中です。
お探しのQ&Aが見つからない時は、教えて!gooで質問しましょう!
似たような質問が見つかりました
- Excel(エクセル) Excelにて、フォルダ内のTextファイルをマクロで統合すると文字化けしてしまう時の解消コード 4 2023/01/01 07:32
- SQL Server [SQLServer] テーブル名からカラム名を取得する 1 2022/08/23 21:20
- C言語・C++・C# C言語で 英文字のみからなる文字列、”Radar”、”WasItACatISaw”、”a”、””(空 5 2022/12/20 15:17
- Visual Basic(VBA) 集めたシートのシート名を変更したい。 下記のコードでサブフォルダにあるファイルのSheet3を集めて 6 2022/08/23 10:38
- その他(プログラミング・Web制作) プログラミングについて(Python) 添付した画像はC言語で簡単に作ったソースで、1つの配列に5つ 3 2022/09/10 19:15
- その他(コンピューター・テクノロジー) 【Tableau Desktop】文字列から8桁の数字を日付型(yyyyMMdd)として取得 1 2023/07/31 10:17
- Ruby 初心者プログラミング 3 2022/10/12 11:31
- C言語・C++・C# c言語 int temp = 0; if(isdigit(arr[i])){ temp=arr[i] 2 2022/03/27 01:44
- その他(プログラミング・Web制作) awkの文字列比較はPOSIXロケールまたはCロケールにおいてバイナリ値の比較に使えるか gawkな 1 2023/04/22 09:21
- Visual Basic(VBA) 以下のVBAで該当文字列の前後に付与したい。 例 前に付与 abc ユーザーID 12345 後に付 3 2022/04/19 21:50
このQ&Aを見た人はこんなQ&Aも見ています
-
【お題】NEW演歌
【大喜利】 若い人に向けたことは分かるけど、それはちょっと寄せ過ぎて変になってないか?と思った演歌の歌詞
-
これ何て呼びますか
あなたのお住いの地域で、これ、何て呼びますか?
-
CDの保有枚数を教えてください
ひとむかし前はCDを買ったり借りたりが主流でしたが、サブスクで簡単に音楽が聴ける今、CDを手に取ることも減ってきたかと思います。皆さんは2024年現在、何枚くらいCDをお持ちですか?
-
牛、豚、鶏、どれか一つ食べられなくなるとしたら?
牛肉、豚肉、鶏肉のうち、どれか一種類をこの先一生食べられなくなるとしたらどれを我慢しますか?
-
好きな和訳タイトルを教えてください
洋書・洋画の素敵な和訳タイトルをたくさん知りたいです!【例】 『Wuthering Heights』→『嵐が丘』
-
配列を使わずに、変数名を動的にループで回したい
C言語・C++・C#
関連するカテゴリからQ&Aを探す
おすすめ情報
- ・漫画をレンタルでお得に読める!
- ・【大喜利】【投稿~11/12】 急に朝起こしてきた母親に言われた一言とは?
- ・好きな和訳タイトルを教えてください
- ・うちのカレーにはこれが入ってる!って食材ありますか?
- ・好きな「お肉」は?
- ・あなたは何にトキメキますか?
- ・おすすめのモーニング・朝食メニューを教えて!
- ・「覚え間違い」を教えてください!
- ・とっておきの手土産を教えて
- ・「平成」を感じるもの
- ・秘密基地、どこに作った?
- ・【お題】NEW演歌
- ・カンパ〜イ!←最初の1杯目、なに頼む?
- ・一回も披露したことのない豆知識
- ・これ何て呼びますか
- ・チョコミントアイス
- ・初めて自分の家と他人の家が違う、と意識した時
- ・「これはヤバかったな」という遅刻エピソード
- ・これ何て呼びますか Part2
- ・許せない心理テスト
- ・この人頭いいなと思ったエピソード
- ・牛、豚、鶏、どれか一つ食べられなくなるとしたら?
- ・あなたの習慣について教えてください!!
- ・ハマっている「お菓子」を教えて!
- ・高校三年生の合唱祭で何を歌いましたか?
- ・【大喜利】【投稿~11/1】 存在しそうで存在しないモノマネ芸人の名前を教えてください
- ・好きなおでんの具材ドラフト会議しましょう
- ・餃子を食べるとき、何をつけますか?
- ・あなたの「必」の書き順を教えてください
- ・ギリギリ行けるお一人様のライン
- ・10代と話して驚いたこと
- ・家の中でのこだわりスペースはどこですか?
- ・つい集めてしまうものはなんですか?
- ・自分のセンスや笑いの好みに影響を受けた作品を教えて
- ・【お題】引っかけ問題(締め切り10月27日(日)23時)
- ・大人になっても苦手な食べ物、ありますか?
- ・14歳の自分に衝撃の事実を告げてください
- ・架空の映画のネタバレレビュー
- ・「お昼の放送」の思い出
- ・昨日見た夢を教えて下さい
- ・ちょっと先の未来クイズ第4問
- ・【大喜利】【投稿~10/21(月)】買ったばかりの自転車を分解してひと言
- ・メモのコツを教えてください!
- ・CDの保有枚数を教えてください
- ・ホテルを選ぶとき、これだけは譲れない条件TOP3は?
- ・家・車以外で、人生で一番奮発した買い物
- ・人生最悪の忘れ物
- ・【コナン30周年】嘘でしょ!?と思った○○周年を教えて【ハルヒ20周年】
- ・あなたの習慣について教えてください!!
- ・都道府県穴埋めゲーム
このQ&Aを見た人がよく見るQ&A
デイリーランキングこのカテゴリの人気デイリーQ&Aランキング
-
” OS ビルド ” の意味が分か...
-
エクセルVBAではRound...
-
VBAを何回も作り直して、容量が...
-
Makefile作成時の拡張子.oとは?
-
コンパイル??
-
マクロ コンパイルがグレーバック
-
「fatal error C1189」を回避す...
-
1 つ以上の複数回定義されてい...
-
<math.h>があるのにsqrtが・...
-
timeGetTime関数を使用できません
-
gccでの分割コンパイルについて
-
【VC++6.0(MFC)】警告「LINK : ...
-
構造体をファイルに出力できません
-
C言語でヘッダファイルにグロー...
-
includeと#include
-
C言語でMIDIを鳴らしたいです。
-
MPLAB v8.36 でビルドできない!!
-
うまくコンパイルできません
-
NETCOBOLのサブプログラムについて
-
cygwin でstackdump
マンスリーランキングこのカテゴリの人気マンスリーQ&Aランキング
-
” OS ビルド ” の意味が分か...
-
VBAを何回も作り直して、容量が...
-
Makefile作成時の拡張子.oとは?
-
C言語でヘッダファイルにグロー...
-
1 つ以上の複数回定義されてい...
-
「fatal error C1189」を回避す...
-
エクセルVBAではRound...
-
<math.h>があるのにsqrtが・...
-
ILSpyで、デコンパイルできない。
-
セミコロンについて
-
外部シンボル "_main"は未解決です
-
マクロ コンパイルがグレーバック
-
[c++] <pthread.h>がinclude で...
-
コンパイルエラー:ユーザ定義...
-
クリティカルエラー Expressio...
-
定数式とはどういう意味でしょ...
-
【VC++6.0(MFC)】警告「LINK : ...
-
ビルドとリビルドの違いを教え...
-
C++コンパイル時に『 C1083: in...
-
戻り値について
おすすめ情報