相关疑难解决方法(0)

如何从C++对象获取类名?

是否有可能获得对象名称?

#include<cstdio>

class one {
public:
    int no_of_students;
    one() { no_of_students = 0; }
    void new_admission() { no_of_students++; }
};

int main() {
    one A;
    for(int i = 0; i < 99; i++) {
        A.new_admission();
    }
    cout<<"class"<<[classname]<<" "<<[objectname]<<"has "
        <<A.no_of_students<<" students";
}
Run Code Online (Sandbox Code Playgroud)

在哪里我可以取名字,像

[classname] = A.classname() = one
[objectname] = A.objectname() = A
Run Code Online (Sandbox Code Playgroud)

C++是否提供了实现此目的的任何机制?

c++ class

50
推荐指数
6
解决办法
14万
查看次数

打印给定类型名称的模板

我想打印类型的名称以进行调试,所以我创建了一个函数来实现这个目的(事实上,我从另一个答案借用了它,我现在找不到),该函数如下所示:

template <typename T> std::string TypeName(T)
{
    auto name = typeid(T).name();
    int status = 0;

    std::unique_ptr<char, void(*)(void*)> res {
        abi::__cxa_demangle(name, NULL, NULL, &status),
        std::free
    };

    return ((status == 0) ? res.get() : name);
}
Run Code Online (Sandbox Code Playgroud)

Live Demo

它工作正常:

int i = 0;
float f = 0.f;

std::cout << TypeName(i) << '\n'; // int
std::cout << TypeName(f) << '\n'; // float, so far so good

std::cout << TypeName(&i) << '\n'; // int *
std::cout << TypeName(&f) << '\n'; // float *, as …
Run Code Online (Sandbox Code Playgroud)

c++ templates name-mangling

5
推荐指数
1
解决办法
263
查看次数

标签 统计

c++ ×2

class ×1

name-mangling ×1

templates ×1