首页
学习
活动
专区
圈层
工具
发布
首页
学习
活动
专区
圈层
工具
MCP广场
社区首页 >问答首页 >在C++中如何移除类型名称的命名空间?

在C++中如何移除类型名称的命名空间?
EN

Stack Overflow用户
提问于 2018-02-20 04:07:41
回答 5查看 0关注 0票数 0

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

代码语言:javascript
运行
复制
#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输出是:

MyNamesspace::MyBaseClass

我要移除MyNamespace::从上面的字符串。

有没有标准的方法cxxabi或者其他库来做这件事还是一个清晰的解决方案?(至少在GCC和Visual C++之间可移植)

EN

回答 5

Stack Overflow用户

发布于 2018-02-20 09:49:58

没有标准的方法来做到这一点,因为没有标准的方法来做名称修改。 如何表示名称是故意未指定的。 C ++标准中没有ABI。 您正在使用的函数abi :: __ cxa_demangle是Itanium C ++ ABI的一部分。 这个功能可能存在也可能不存在。

票数 0
EN

Stack Overflow用户

发布于 2018-02-20 10:57:51

在GCC中,有一个名为__FUNCTION__的变量作为gnu c语言扩展的一部分,它在C ++中被当作一个变量来处理。 (根据GCC版本的不同,C处理方式不同)

在Visual Studio中,有一个预定义的宏,它具有相同的名称并执行相同的工作。 说明在这里

可以使用__FUNCTION__来获取当前函数的名称。 所以,要得到类的名字,可能你可以在类的构造函数中使用它:

代码语言:javascript
运行
复制
namespace MyNamespace
{
    class MyBaseClass
    {
    public:
        MyBaseClass(): myName(__FUNCTION__){}
        string name() { return myName; }
    private:
        string myName;
    };
}

所以,如果你调用这个类的实例的name()函数,你会得到“MyBaseClass”响应。

票数 0
EN

Stack Overflow用户

发布于 2018-02-20 11:36:55

如果只想定义一个成员函数,它将返回类的字符串名称,而不使用命名空间,那么我想知道为什么要使用cxxabi甚至__FUNCTION__或者其他任何事情,除了简单地这样做:

代码语言:javascript
运行
复制
namespace MyNamespace
{
    class MyBaseClass
    {
    public:
        //make the function const as well
        std::string name() const { return "MyBaseClass"; }
    };
}

还可以添加另一个成员函数:

代码语言:javascript
运行
复制
std::string fullname() const { return "MyNamespace::MyBaseClass"; }
票数 0
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/-100007402

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档