Utilizzo una coppia di funzioni che utilizzano un puntatore come chiave univoca. Voglio dichiarare un puntatore costante da usare come chiave. Qual è l'approccio più sicuro e più chiaro per farlo?Qual è il metodo più chiaro per la dichiarazione di un puntatore costante?
Qui ci sono 2 possibili approcci, ma entrambi hanno una breve corrispondenza.
Un auto puntatore riferimento:
static const void * const propertyKey = &propertyKey; //... objc_getAssociatedObject(object, propertyKey);
Downside: la dichiarazione è lungo e spaventoso bello! Potrebbe facilmente confondere qualcuno che non sa a cosa serve. Upside: difficile una volta capito cosa fa è facile da usare.
Un const statico che dovrebbe essere fatto riferimento:
static const char propertyKey; //... objc_getAssociatedObject(object, &propertyKey);
Contro: Quando viene utilizzato il variabile deve essere fatto riferimento piuttosto che semplicemente utilizzato, che è facile perdere (ma compilatore dovrebbe sottolineare questo come un tipo non corrispondente). Se la dichiarazione viene modificata in modo che venga assegnato un valore, potrebbe avere effetti disastrosi perché l'univocità del puntatore non può più essere garantita. Upside: la dichiarazione è più facile da convincere.
Non penso che nessuno di questi sia immediatamente evidente. Qualche suggerimento migliore?
Quale problema stai cercando di risolvere? – Sebivor
Chiedo perché non sembra esserci alcun vantaggio nell'usare i puntatori alle variabili statiche come chiavi per gli array assosciative. Perché non usare solo variabili statiche? – Sebivor
@modifiablelvalue Poiché 'objc_setAssociatedObject()' richiede che le chiavi siano puntatori a 'void'. –