Tôi đã tìm thấy một giải pháp đơn giản ở đâu đó trên internet với một lớp nhận dạng mà không được tích hợp sẵn trong C++ RTTI.Danh tính lớp không có RTTI
template <typename T>
class Identity {
public:
static int64_t id()
{
static int64_t dummy;
return reinterpret_cast<int64_t>(&dummy);
}
};
Khi chúng ta cần một số lớp ID, chúng ta chỉ cần sử dụng:
Identity<OurClass>::id();
Tôi đang tự hỏi, là có bất kỳ va chạm? Nó có thể trả lại cùng một ID cho các lớp khác nhau hoặc ID khác nhau cho cùng một lớp không? Tôi đã thử mã này với g ++ với các giá trị tối ưu hóa khác nhau, mọi thứ có vẻ ok.
Về nguyên tắc, có. Không có gì đảm bảo rằng con trỏ hàm có cùng kích thước với 'int'. –
Điều này có liên quan đến sở thích của tôi ... –
Để tránh vấn đề trên, tốt hơn nên đặt biến 'int' tĩnh trong mẫu hàm thành viên tĩnh đó và trả về một con trỏ tới * đó *. Trình biên dịch sẽ tối ưu hóa các chức năng đi anyway. – Electro