Trong C++, khi chúng ta sử dụng typeid
để lấy tên kiểu của một đối tượng hoặc một lớp, nó sẽ hiển thị một chuỗi được trang trí (xâu chuỗi). Tôi sử dụng cxxabi
để demangle nó:Loại bỏ không gian tên của tên loại trong C++
#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;
}
Sản lượng trong gcc
là:
MyNameSpace :: MyBaseClass
tôi cần phải loại bỏ MyNamespace::
từ chuỗi trên.
tôi có thể xóa chúng bằng cách xử lý chuỗi
.
Nhưng
có cách nào tiêu chuẩn với cxxabi
hoặc các thư viện khác để làm điều này hoặc giải pháp rõ ràng? (Ít nhất là di động giữa gcc và Visual C++)
+1, câu hỏi thông tin. – iammilind
IIRC sẽ là hợp pháp cho việc triển khai tuân thủ để chỉ trả lại cùng một chuỗi (ví dụ: "godzilla") cho bất kỳ lớp nào. – 6502
Bạn có thể sử dụng các quy ước đặt tên khác nhau cho các lớp và không gian tên, để bạn có thể xem ngay lập tức cái nào trong đó có trong 'X :: Y :: Z :: MyType'. –