Ho una struttura dati C che rappresenta un vettore di valori booleani; per ragioni al di fuori del mio controllo le bool 'sono memorizzate internamente come numeri interi con due valori magici (non 0 e 1 ...) che rappresentano il vero e il falso. Ho creato una classe C++ che racchiude questa struttura C e funziona bene. Ho implementato le set()
e get()
metodi come:Sovraccarico C++ [] con trasformazione
void Class::set(size_t index , bool value) {
if (value)
c_ptr[index] = SPECIAL_TRUE_VALUE;
else
c_ptr[index] = SPECIAL_FALSE_VALUE;
}
questo funziona bene; ma idealmente vorrei sovraccaricare l'operatore [], tuttavia non mi è chiaro come/se posso farlo a causa della speciale trasformazione tra bool e valori interi?
È necessario leggere un po 'di * classi proxy * – vsoftco
Sì, ho appreso le classi proxy oggi e sovraccarico l'operatore di assegnazione; che in generale sono stato un po 'riluttante a fare. – user422005
Questo potrebbe non essere possibile per la soluzione, ma dovresti pensare alla frequenza delle trasformazioni rispetto alla frequenza degli accessi booleani. Se si utilizzano principalmente le funzioni set/get/[] e raramente si utilizza la trasformazione SPECIAL _ * _ VALUE, potrebbe essere più semplice archiviare i bool, quindi trasformarli solo quando necessario. – nic