Mam bazę danych C reprezentującą wektor wartości logicznych; z przyczyn poza moją kontrolą, boole "są przechowywane wewnętrznie jako liczby całkowite z dwiema magicznymi wartościami (nie 0 i 1 ...) reprezentującymi true i false. Stworzyłem klasę C++ owijającą tę strukturę C i działa ona ładnie. I wdrożyły set()
i get()
metod jak:Przeciążenie C++ [] z transformacją
void Class::set(size_t index , bool value) {
if (value)
c_ptr[index] = SPECIAL_TRUE_VALUE;
else
c_ptr[index] = SPECIAL_FALSE_VALUE;
}
Działa to ok; ale najlepiej chciałbym przeciążać operatora [], jednak nie jest dla mnie jasne, jak/jeśli mogę to zrobić - ze względu na specjalną transformację między wartościami bool a wartościami całkowitymi?
Musisz przeczytać trochę o * klasach proxy * – vsoftco
Tak - nauczyłem się dzisiaj o klasach proxy i przeciążaniu operatora przypisania; na co generalnie niechętnie. – user422005
To może, ale nie musi być opłacalne dla twojego rozwiązania, ale powinieneś pomyśleć o częstotliwości transformacji a częstotliwości dostępu boolowskiego. Jeśli używasz przede wszystkim funkcji set/get/[] i rzadko korzystasz z transformacji SPECIAL _ * _ VALUE, łatwiejsze może być przechowywanie boolów, a następnie transformowanie tylko w razie potrzeby. – nic