
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も見ています
-
今年はじめたいことは?
今年はこれをはじめたい!ということを教えてください!
-
歳とったな〜〜と思ったことは?
歳とったな〜〜〜、老いたな〜〜と思った具体的な瞬間はありますか?
-
コンビニでおにぎりを買うときのスタメンはどの具?
コンビニでおにぎりを買うとき、何の具材を選ぶことが多いですか?
-
この人頭いいなと思ったエピソード
一緒にいたときに「この人頭いいな」と思ったエピソードを教えてください
-
泣きながら食べたご飯の思い出
泣きながら食べたご飯の思い出を教えてください。
-
配列を使わずに、変数名を動的にループで回したい
C言語・C++・C#
-
他の.CPPファイルに定義した関数を呼び出す方法について
C言語・C++・C#
関連するカテゴリからQ&Aを探す
おすすめ情報
- ・漫画をレンタルでお得に読める!
- ・一番好きなみそ汁の具材は?
- ・泣きながら食べたご飯の思い出
- ・「これはヤバかったな」という遅刻エピソード
- ・初めて自分の家と他人の家が違う、と意識した時
- ・いちばん失敗した人決定戦
- ・思い出すきっかけは 音楽?におい?景色?
- ・あなたなりのストレス発散方法を教えてください!
- ・もし10億円当たったら何に使いますか?
- ・何回やってもうまくいかないことは?
- ・今年はじめたいことは?
- ・あなたの人生で一番ピンチに陥った瞬間は?
- ・初めて見た映画を教えてください!
- ・今の日本に期待することはなんですか?
- ・集中するためにやっていること
- ・テレビやラジオに出たことがある人、いますか?
- ・【お題】斜め上を行くスキー場にありがちなこと
- ・人生でいちばんスベッた瞬間
- ・コーピングについて教えてください
- ・あなたの「プチ贅沢」はなんですか?
- ・コンビニでおにぎりを買うときのスタメンはどの具?
- ・おすすめの美術館・博物館、教えてください!
- ・【お題】大変な警告
- ・洋服何着持ってますか?
- ・みんなの【マイ・ベスト積読2024】を教えてください。
- ・「これいらなくない?」という慣習、教えてください
- ・今から楽しみな予定はありますか?
- ・AIツールの活用方法を教えて
- ・最強の防寒、あったか術を教えてください!
- ・歳とったな〜〜と思ったことは?
- ・モテ期を経験した方いらっしゃいますか?
- ・好きな人を振り向かせるためにしたこと
- ・スマホに会話を聞かれているな!?と思ったことありますか?
- ・それもChatGPT!?と驚いた使用方法を教えてください
- ・見学に行くとしたら【天国】と【地獄】どっち?
- ・これまでで一番「情けなかったとき」はいつですか?
- ・この人頭いいなと思ったエピソード
- ・あなたの「必」の書き順を教えてください
- ・14歳の自分に衝撃の事実を告げてください
- ・人生最悪の忘れ物
- ・あなたの習慣について教えてください!!
このQ&Aを見た人がよく見るQ&A
デイリーランキングこのカテゴリの人気デイリーQ&Aランキング
-
” OS ビルド ” の意味が分か...
-
VBAを何回も作り直して、容量が...
-
<math.h>があるのにsqrtが・...
-
漢字のコメントをはずすとコン...
-
「fatal error C1189」を回避す...
-
C言語でヘッダファイルにグロー...
-
ビルドとリビルドの違いを教え...
-
Makefile作成時の拡張子.oとは?
-
VS2010でLibHaruをビルドした...
-
外部シンボル "_main"は未解決です
-
visual fortranのコンパイル時...
-
CImageクラスの使用について
-
エクセルVBAではRound...
-
マクロ コンパイルがグレーバック
-
OpenCVを Borland C++ Builder...
-
GCC Developer Liteでヘッダフ...
-
ビルドから除外されたソースの...
-
1 つ以上の複数回定義されてい...
-
ヘッダファイルに関数本体を書...
-
2G以上のファイル操作
マンスリーランキングこのカテゴリの人気マンスリーQ&Aランキング
-
VBAを何回も作り直して、容量が...
-
” OS ビルド ” の意味が分か...
-
Makefile作成時の拡張子.oとは?
-
エクセルVBAではRound...
-
C言語でヘッダファイルにグロー...
-
「fatal error C1189」を回避す...
-
1 つ以上の複数回定義されてい...
-
ILSpyで、デコンパイルできない。
-
<math.h>があるのにsqrtが・...
-
コンパイルエラー:ユーザ定義...
-
C++コンパイル時に『 C1083: in...
-
C言語のコンパイルができません
-
マクロ コンパイルがグレーバック
-
外部シンボル "_main"は未解決です
-
セミコロンについて
-
【VC++6.0(MFC)】警告「LINK : ...
-
ビルドとリビルドの違いを教え...
-
漢字のコメントをはずすとコン...
-
MO, PO, POT, ファイルの開き方...
-
[c++] <pthread.h>がinclude で...
おすすめ情報