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建议的方法。