3

C++ プログラムの各変数の一意の名前を (実行時に) 取得できるかどうかを知りたいです。たとえば、メインで宣言すると

MyClass A;

そして MyClass で私は宣言します

int I;

「main/A/I」のようなものを返す魔法のフォーラムが欲しいです。

このようなものは存在しますか?

ありがとうございました!


これの目的は、変数の割り当てを追跡することです。標準データ型のラッパーとして使用するクラスを作成しました。このクラスのコンストラクターは、各変数を識別するために文字列を受け入れます。

クラスで宣言された変数と、このクラスの複数のインスタンス化がある場合に問題が発生します。いえ

class MyClass {
...
MyInt data ("variable_name"); // MyInt is the wrapper for int
... 
};

...

int main () {
...
MyClass a;
MyClass b;
...
}

データの名前を静的に初期化すると、a.data と b.data を区別できなくなります。誰かが示唆したように、メモリアドレスをIDとして使用することもできますが、アドレスを人間が読めるパスにマップするにはどうすればよいでしょうか?

4

3 に答える 3

1

(データ構造を宣言するときに) 追加の作業を行っていない限り、通常、これは C++ では不可能です。プログラムのどこにもそのようなデータは保存されていません。

実際、コメンターの1人が言及したように、場合によっては、デバッグデータ(Windowsのpdbなど)がある場合、プラットフォーム固有の方法で、デバッガーと同じようにそれを実行できる場合があります。

于 2013-07-24T07:46:54.453 に答える
0

あなたが達成したいことはよくわかりません.私の知る限り、詳細を提供するC++関数はありません.自分で機能を記述する必要があります.コードスニペットをいくつか提供しています.それが役立つかどうかわかりません. :

class MyClass
{
        public:
        MyClass(int z) : i(z)
        {
        }
        const char* getType()
        {
            return typeid(i).name();
        }
    private:
        int i;
};

class MyClassDerived:public MyClass
{
    public:
        MyClassDerived(int k):MyClass(k)
        {        
        }
};

int main()
{
   MyClass *m = new MyClass(10);
   cout<< typeid(*m).name() << "/" << m->getType()<< endl;

   MyClassDerived *m1 = new MyClassDerived(20);
   cout<< typeid(*m1).name() << "/" << m1->getType();
   return 0;
}

` 出力は次のようになります:

7 MyClass/i 14 MyClassDerived/i

問題が解決するかどうかお知らせください。

于 2013-07-24T08:18:11.577 に答える