Powiązane pytanie: std::map default value for build-in type - Subtelna różnica polega na tym, że chcę więcej niż wiedzieć, czy wartość jest zainicjowana na 0
, czy też nie, ale chcę określić "konstruktor". Nie dbam nawet o to, czy wiąże się to z obciążeniem z definicją klasy, po prostu chcę mieć czysty "specjalny" podstawowy typ. Mógłby to zrobić nawet syntaktyczny hack. Typ niebędny jest bardzo łatwy do wykonania, jest to całe zadanie konstruktora.Jak utworzyć podstawowy typ C++, który sam się inicjuje?
Chciałbym mieć hashmap unordered_map<void *, int>
, ale aby wszystkie jego wartości domyślnie-zostały zainicjowane na -1
zamiast 0
lub śmieci. Wynika to z faktu, że zero jest poprawnym indeksem, a ja wolałbym domyślnie-zainicjować z pewnością nieprawidłową wartością.
myślę, widzę kilka niechlujstwa sposobów to może być wykonane z:
struct minus1 {
int i;
minus1() i(-1) {}
};
unordered_map<void*, minus1>
Ale nie podoba mi się to, bo muszę używać .i
aby uzyskać dostęp do int, a tak naprawdę po prostu musi być int.
Dobrze więc może mam moja mapa obsłużyć to:
struct PointerToIDHash {
std::unordered_map<void *, int> h;
PointerToIDHash() {
// ctor is powerless to affect the initialized values of future insertions into h
}
};
Dobrze, gówno teraz mam .h
też. Uhhhh. Czy mogę odziedziczyć z szablonu? (brzmi to przerażająco, ale może to być czysty sposób, jeśli można go usunąć)
Jak utworzyć typ, który zachowuje się tak jak int, ale zawsze jest inicjowany na -1
?
Wolałbym wiedzieć, jak to zrobić z C++ i bez niego.
Myślałeś o zapewnienie operatora konwersji? – Zeta
Co to jest? :) Powiedz mi więcej. –
Spójrz na odpowiedź a.lasram. Zasadniczo o to mi chodziło. – Zeta