Tôi muốn tạo một băm cho một lớp dựa trên kiểu dẫn xuất của nó tại thời gian biên dịch. Hôm nay tôi tạo ra nó như:C + + loại id tại thời gian biên dịch
template<class Type>
class TypeBase
{
public:
static const unsigned s_kID;
};
template<class Type>
const unsigned TypeBase<Type>::s_kID = hash(typeid(Type));
nhưng điều này tạo ra (khá cần thiết) chạy mã thời gian khởi tạo (hash (..) chức năng thực hiện một băm đơn giản dựa trên std :: type_info :: name())
Ý tưởng?
Không có nguy cơ bạn gặp phải xung đột băm hoặc có thể đó không phải là vấn đề? –
@Andreas: Khi tạo băm, tôi cũng có một bản đồ với các mục băm. Vì vậy tôi có thể kiểm tra nếu có va chạm. Bên cạnh đó, số lượng lớp học có thể là 20, vì vậy tôi đoán tôi cũng an toàn với điều đó. – Robert
Bạn không thể làm điều gì đó như 'id = ++ someGlobalCounter'? (Tôi nhận ra đây không phải là petformance quan trọng, chỉ tò mò) –