2009-05-17 25 views
0

C++でvartiablesの値を別の名前に変換するにはどうすればよいですか?このPHPスニペットのように。C++の文字列の値が別の文字列の名前

$string = 'testVar'; 

${$string} = 'test'; 

echo $testVar; // test 
+1

なぜそれをしたいですか?おそらく、別の方法があります。書き換え可能な値を別の名前に変換することはありません。 – ChrisW

答えて

6

地図の使い方はどうですか?あなたはシンボルテーブルを使用してプログラムをコンパイルする場合

#include <iostream> 
#include <map> 
#include <string> 

using namespace std; 

map<string, string> hitters; 

hitters["leadoff"] = "Jeter"; 
hitters["second"] = "Damon"; 
hitters["third"] = "Teixiera"; 
hitters["cleanup"] = "Matsui"; 

string hitter = "cleanup"; 

cout << hitters[hitter] << endl; 
+0

またはハッシュマップ。 +1! –

3

PHPは分かりませんが、私はあなたがC++でそれを行うことはできません。コンパイルされたC++プログラムでは、変数名にランタイム表現がないため、実行時にそのような名前をロードする方法はありません。

これは、元のソースコードがメモリにあるスクリプト言語や構文ツリーの少なくとも一部の表現でしかできないようです。

+0

...またはインタプリタまたはイントロスペクションレイヤを実装することによって実現できます。 – dmckee

1

これはC++でできることではありません。 C++コードをコンパイルすると、関数と変数の名前に関する情報が失われます(技術的には、シンボルテーブルに格納することができますが、デバッグの目的にのみ使用されます)。このようなことを実現するには、mapなどのデータ構造を使用する必要があります。これは、PHP配列に似ています。

1

それはあなたがポインタを使用することをお勧めしますように聞こえる:コンパイル後

string testVar; 
string *str = &testVar; 
*str = "test"; 
cout << testVar << endl; // test 

は、C++コンパイラを使用すると、下位レベルを使用する必要がありますので、同じ種類を行うために構築し、変数の元の名前などの情報を破棄しますもの。

0

、あなたはシンボルテーブルを取得するには(Linux)の 「readelfが-s yourexecutable」を使用することができます。 その後、変数名を付けた出力でgrepを実行し、出力から "cut"コマンドを使用してアドレスを取得します。

readelf -s a.out | grep ' var$' | tr -s ' '| cut -d' ' -f3 
関連する問題