C++ 将指针的变量名提取为字符串
我有一个指向C++ 将指针的变量名提取为字符串,c++,C++,我有一个指向int对象的指针 int x = 10; int *ptr; ptr = &x; 我想编写一个函数GetString(int*ptr),它将返回字符串ptr。如何在C++中实现? #include <iostream> #include <map> const std::string& getString(int *ptr, const std::map<int*, std::string>& mp
int
对象的指针
int x = 10;
int *ptr;
ptr = &x;
我想编写一个函数GetString(int*ptr)
,它将返回字符串ptr
。如何在C++中实现? <代码>
#include <iostream>
#include <map>
const std::string& getString(int *ptr, const std::map<int*, std::string>& mp){
return mp.find(ptr)->second;
}
int main()
{
std::map<int* , std::string> mp;
int x = 10;
mp.insert({&x, "ptr1"});
int y = 9;
mp.insert({&y, "ptr2"});
std::cout << getString(&y, mp);
}
#包括
常量std::string和getString(int*ptr、常量std::map和mp){
返回mp.find(ptr)->秒;
}
int main()
{
std::map-mp;
int x=10;
插入({&x,“ptr1”});
int y=9;
插入({&y,“ptr2”});
STD::CUT< P>在C++中没有直接提取变量字符串名的方法。语言只有基本的反射特性,参见So.Po.< /P> 但是您可以使用预处理器字符串化
#
来破解类似的东西:定义
#define STRINGIFY(x) #x
然后,预处理器用字符串“ptr”
替换STRINGIFY(ptr)
注意:如果你想对宏展开的结果进行字符串化。你不能。但是如果有许多指针需要以这种方式处理,你可以使用map,如果只有一个指针,则可以使用一对。你能给出一个用法示例吗?我试过这种方法,它确实适用于指针。问题是(这是我的错,问题没有反映这一点)我实际上想定义这样一个函数:
string GetVariableName(int*ptr){string str=STRINGIFY(ptr);return str;}
当我这样做,然后使用int*alphabeta;GetVariableName(alphabeta)它仍然返回字符串<代码> 'PTR '/COD>。输出是这样的,这是有意义的,但是它给我呈现了String化的方法,我想。(不幸的是,C++中没有一种方法可以用函数来完成这个任务。最接近的是,使<代码> GETVIALBABLNAME/<代码>本身成为“String化”。宏,或使用类似asmmo建议的方法。