typeid.name()返回的是c,怎么把这种类型拼接出字符串
时间: 2024-10-13 14:15:05 浏览: 35
在C++中,`typeid(T).name()`返回的是一个表示类型T的名称的字符常量指针,通常包含像"C::class_name"这样的形式,其中"C"代表类的分类(如"class", "struct", "union"等),`class_name`是类型的具体名称。如果你想要将这个信息转换成字符串,可以直接使用`std::string`的构造函数接受`const char*`作为参数:
```cpp
#include <typeinfo>
#include <string>
// 假设我们有一个名为MyClass的类
class MyClass {
public:
std::string typeName() const {
std::string typeStr = typeid(MyClass).name();
// 删除首字符'C'
return typeStr.substr(1);
}
};
int main() {
std::string myTypeName = MyClass().typeName();
std::cout << "Type name as a string: " << myTypeName << std::endl;
return 0;
}
```
在这个例子中,`typeName()`方法从`typeid(MyClass).name()`中提取出类型名并去掉首字符"C",然后返回一个字符串。
相关问题
用cout打印typeid().name()返回值类型只顯示一個字元,怎麼辦?
当你尝试使用`std::cout`打印`typeid()`函数返回的`name()`结果时,如果显示的是单个字符而不是完整的类型名称,这通常是因为`name()`返回的是一个类型标识符(Type Identifier),它是一个内部使用的C++编译器特定的字符串,可能包含了编译器的一些编码或者简化的形式。
解决这个问题的一个常见方法是使用` typeid(T).name() << std::endl; `,并配合`std::hex`来查看十六进制表示,这样可以更清晰地看到类型的二进制表示:
```cpp
#include <typeinfo>
#include <iostream>
int main() {
std::cout << "Type of int: ";
std::cout << typeid(int).name() << std::endl;
std::cout << "Type in hexadecimal: ";
std::cout << typeid(int).name() << std::hex << std::endl;
return 0;
}
```
这样,你会看到`typeid(int)`的完整名字以及它的十六进制表示,有助于理解这个标识符的实际内容。
如果你仍然只想得到类型名称的一部分,你可以使用`substr`函数截取你需要的部分:
```cpp
std::string typeName = typeid(int).name();
std::cout << "Shortened type name: " << typeName.substr(0, 5) << "...";
```
这里假设你想要的是前五个字符。
c++中,type_info()的name函数返回的字符串有可能出现"class "等信息,该如何精简字符串
在C++中,`std::type_info::name()`返回的是类型的名字,通常会包含"::class "这样的前缀。如果你想要精简这个字符串并移除这些不必要的前缀,你可以使用一种常见的做法,即手动去掉`name()`返回结果的特定字符或子串。这里是一个简单的示例:
```cpp
#include <typeinfo>
#include <string>
std::string type_name(const std::type_info& ti) {
// 获取名字,但去掉"::class "前缀
std::string typeName = ti.name();
size_t prefixLength = typeName.find("class ");
if (prefixLength != std::string::npos) {
typeName = typeName.substr(prefixLength + "class ".length());
}
return typeName;
}
// 示例用法
int main() {
std::type_info intTypeInfo = typeid(int);
std::cout << "Type name without 'class ': " << type_name(intTypeInfo) << "\n";
return 0;
}
```
这段代码定义了一个辅助函数`type_name`,它从`name()`返回的字符串中找到并删除"::class ",然后返回剩余的部分。
阅读全文