C++:如何获取变量的路径
C++: how to get the path of a variable?
我想知道是否有可能(在运行时)为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,但如何将地址映射到人类可读的路径?
除非您正在做一些额外的工作(在声明数据结构时),否则这在C++中通常是不可能的。程序中的任何位置都没有存储这样的数据。
事实上,正如一位评论者所提到的,在某些情况下,以特定于平台的方式,如果你有调试数据(比如windows中的pdb),你可能可以像调试器一样做到这一点。
绝对不是你所描述的意义。听起来你想要的是通过其整个继承层次结构来识别一个变量,这就是参考站点的用途,而在程序中包含这些信息只会增加显著的性能问题。
如果你只想用一个唯一的标识符来使程序中的每个变量都是可识别的和全局的,那么认真思考一下。这是一个非常糟糕的设计,更不用说实践了,会导致很多很多令人讨厌的错误。
然而,这可能就是你所问的:
"我可以列出特定程序X的可变类结构吗?"
你可以。但它可能比你想要的工作更多,C++没有内置这样的东西,但它可能存在于某个地方,但如果存在,我不知道。要做到这一点,你可以让解析器将你的代码解析成一个解析树,并使用访问者模式遍历该树,在每个变量到达时打印出它,并将父叶附加到它上面。这是你可以通过调试器看到的信息(不是变量,而是每个编译器解析并构建一个解析树后在上面执行),这是调试器在运行时构建时保存的内容,这样您就可以"返回"它,实际上您正在返回程序解析树。
不太确定你想要实现什么,据我所知,没有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/i14 MyClassDerived/i
如果它能解决你的问题,请告诉我。
- boost xml parsingl将xml的路径作为变量发送
- 从 C 中的变量获取文件的路径,C++
- 如何为文件路径使用变量?
- CMake 中的路径变量
- 在 Visual Studio 2010(及更高版本)中定义包含或链接路径变量的位置
- 局部变量 'sp' 在被读取之前在所有路径中重新分配
- 如何更改变量文件名的文件路径?
- 如何从文件中存在的路径中检索环境变量
- 如何将文件路径分配给C 中的变量
- QT;我如何在运行时存储通往变量的资源路径
- 使函数接受字符串变量内的路径
- 我正在尝试在Eclipse中构建一个C 项目,但是即使在使用MINGW路径设置路径变量之后,也会获得构建错误
- 从变量字符串中提升文件系统路径
- 当InProcServer32键定义DLL的完整路径时,path环境变量中为什么需要COM DLL的路径
- 无法使用 CMake 变量PROJECT_SOURCE_DIR定义静态库的绝对路径
- 我如何克服无声无法更改VC 2013中的路径环境变量
- 最短路径,带有两个变量
- 为什么ShellExecute不能使用包含文件路径的LPCSTR变量
- 代码块,添加了环境变量路径,但在安装文件夹之外出现 g++ 错误
- 错误的环境变量路径以Visual Studio 2013结尾