gpt4 book ai didi

c++ - 在 C++ 中删除类型名称的命名空间

转载 作者:IT老高 更新时间:2023-10-28 21:52:59 28 4
gpt4 key购买 nike

在 C++ 中,当我们使用 typeid 来获取对象或类的类型名称时,它会显示一个修饰(损坏)的字符串。我使用 cxxabi 来解开它:

#include <cxxabi.h>
#include <typeinfo>

namespace MyNamespace {

class MyBaseClass
{
public:
const std::string name()
{
int status;
char *realname = abi::__cxa_demangle(typeid (*this).name(),0,0, &status);
std::string n = realname;
free(realname);
return n;
}
};

}

int main()
{
MyNamespace::MyBaseClass h;
std::cout << h.name() << std::endl;
}

gcc中的输出是:

MyNamespace::MyBaseClass

我需要从上面的字符串中删除 MyNamespace:: 我可以通过字符串操作删除它们 .

但是 有没有标准的方法用 cxxabi 或其他库来做到这一点或一个明确的解决方案?(至少在 gcc 和 Visual C++ 之间可移植)

最佳答案

没有标准的方法可以做到这一点,句号,因为没有标准的方法来进行名称修改。故意未指定如何表示名称。 C++ 标准中没有 ABI。您正在使用的函数 abi::__cxa_demangle 是 Itanium C++ ABI 的一部分。该功能可能存在也可能不存在于其他地方。

就使用 Itanium C++ ABI 做您想做的事情而言,他们故意不提供这样的功能。

关于c++ - 在 C++ 中删除类型名称的命名空间,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/7695555/

28 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com