Casa Finanza personale Creazione di propri UDL in C ++ - dummies

Creazione di propri UDL in C ++ - dummies

Sommario:

Video: What caused the French Revolution? - Tom Mullaney 2024

Video: What caused the French Revolution? - Tom Mullaney 2024
Anonim

La libreria standard, insieme alle funzionalità incorporate di C ++, fornisci un'interessante serie di letterali. Tuttavia, il vero valore dei letterali diventa più evidente quando crei il tuo.

Esistono molte esigenze diverse che è possibile affrontare utilizzando gli User-Defined Literals (UDL), ma tre esigenze comuni sono supportare le conversioni di dati, semplificando il lavoro sui tipi personalizzati e ottenendo gli effetti collaterali desiderati senza il solito numero di problemi di codifica.

Sebbene i letterali della libreria standard o incorporati siano disponibili sia in forma di prefisso che di suffisso, è possibile creare il suffisso solo quando si definiscono i propri valori letterali. Inoltre, il suffisso deve iniziare con un carattere di sottolineatura. Il carattere di sottolineatura serve a prevenire conflitti con suffissi esistenti e ad assicurare che altri sviluppatori sappiano che il letterale è un modulo personalizzato (non standard).

Sviluppo di una conversione UDL

È possibile incapsulare le conversioni all'interno di un UDL. Tutto ciò che devi fare una volta creato tale UDL è fornire il suffisso appropriato quando si definisce la costante per ottenere il risultato desiderato. L'esempio CustomUDL01 dimostra una tecnica per definire una conversione che modifica l'input del raggio sull'area di un cerchio nella costante.

# include usando lo spazio dei nomi std; constexpr long double operator "_circ (raggio doppio lungo) {raggio di ritorno * raggio * 3. 141592;} int main () {doppio x = 5. 0_circ; cout <<" l'area del cerchio è: "<< x << endl; return 0;}

Per creare l'UDL, l'esempio si basa su un constexpr con un valore di ritorno di un doppio lungo e un valore di input, raggio, di un doppio lungo.L'equazione per calcolare l'area di un cerchio è πr 2 . Come puoi vedere, l'esempio esegue il calcolo corretto come parte del constexpr.

Ogni volta che crei un UDL personalizzato, il compilatore ti obbliga a usare il tipo più grande per la conversione.Questo significa che devi usare un doppio lungo per i letterali in virgola mobile e per i caratteri letterali interi senza segno lungo lungo. Anche se successivamente scegli di utilizzare un tipo più piccolo, come in questo esempio dichiarando x come un doppio, il letterale stesso deve impiegare il tipo più grande possibile.

Per dichiarare un UDL del nuovo tipo, l'esempio crea x, che usa il suffisso _circ. s il risultato sullo schermo. Quando si esegue questo esempio, si vede che il valore corretto è stato inserito in x, come mostrato qui:

L'area del cerchio è: 78. 5398

Sviluppo di un UDL di tipo personalizzato

Molto del codice che si l'incontro si basa su tipi personalizzati che sono difficili da seguire e capire.La creazione di un UDL per semplificare il codice rende le cose più chiare e riduce il rischio di errori. L'esempio CustomUDL02 mostra un tipo personalizzato, l'operatore utilizzato per creare l'UDL e il modo in cui l'UDL viene utilizzato per definire un valore letterale.

# include usando lo spazio dei nomi std; struct MyType {MyType (double Input): Value (Input) {} double Value;}; MyType operator" _mytype (long double Valore) {return MyType (Value);} int main () {auto UDLType = 145. 6_mytype; cout << uDLType Valore << endl;. Return 0;}

Affinché questo tecnica per funzionare, è necessario creare un costruttore per il tipo che accetta il numero di input richiesti per configurare il tipo. Almeno il costruttore deve accettare un tipo o il valore di input che l'utente fornisce è perso.

Il tipo personalizzato necessita non supporta lo stesso tipo di dati di dimensione richiesto dall'operatore, ma devono essere dello stesso tipo. Ad esempio, non è possibile passare un doppio lungo a un int.

Quando si esegue questo esempio, viene visualizzato un output valore di 145. 6, che è il valore immesso nel tipo personalizzato.È possibile gestire configurazioni abbastanza complesse usando questo approccio.L'utente del tipo personalizzato ottiene la capacità di creare codice chiaro che è facile da seguire e interpretare, anche quando i tipi sottostanti sono complessi.

Uso di un UDL personalizzato per effetti collaterali

Uno dei più interessanti u ses for UDLs è quello di creare effetti collaterali (un'operazione diversa dalla normale o normale operazione, sia per rendere l'applicazione più breve e più efficiente o per fornire maggiore flessibilità). Si desidera definire un determinato tipo di operazione che si verifica in seguito alla definizione del letterale.

Ciò che ottieni è puramente letterale, ma letterale che non denota necessariamente un valore che prevedi di utilizzare in seguito. L'esempio CustomUDL03 mostra uno di questi usi non tradizionali.

# include usando lo spazio dei nomi std; operatore vuoto" _countdown (unsigned long long Value) {for (int i = Value; i> = 0; i--) cout << i << endl;} int main () {10_countdown; return 0;}

Si noti che l'operatore _countdown non è collegato a qualcosa che normalmente si assocerebbe a un valore, in realtà non restituisce alcun valore, ma si ottiene invece un effetto collaterale. Quando si esegue questo esempio, si questa uscita.

10 9 8 7 6 5 4 3 2 1 0

Cosa è successo è che il compilatore ha sostituito 10_countdown con estratti singoli cout, uno per ogni iterazione. che si finisce con è 11 istruzioni cout che emettono i valori compresi tra 10 e 0 (in ordine inverso) L'effetto collaterale UDL apre tutti i tipi di possibilità interessanti per la creazione di codice che semplifica determinate attività ripetitive in un modo che rende ovvio il loro uso.

Creazione di propri UDL in C ++ - dummies

Scelta dell'editore

Come utilizzare le funzionalità dell'app Klout su dispositivi Apple - dummies

Come utilizzare le funzionalità dell'app Klout su dispositivi Apple - dummies

L'esperienza mobile di Klout è più limitato rispetto al sito web completo. Tuttavia, molte funzionalità sono ancora disponibili con l'app per dispositivi mobili, incluso dare + K ai tuoi influenzatori, controllare il tuo punteggio Klout e apportare semplici modifiche al tuo profilo. E con l'implementazione di Klout per il tuo iPhone Passbook puoi persino usare Klout per ottenere ...

Metriche dei social media: App Android SDK di Google Analytics - dummies

Metriche dei social media: App Android SDK di Google Analytics - dummies

Tracciamento delle metriche di un'applicazione ( un'app) è stata semplificata, ma le app sono ancora isolate. Puoi tenere traccia di ogni app, ma le soluzioni sono ancora in fase di creazione per tenere traccia di tutte le app. Per andare avanti con Google Analytics SDK per la tua app Android, segui questi passaggi: Scarica l'SDK di Google Analytics per Android. Aggiungi la libreria libGoogleanalytics. jar ...

Metriche sui social media: individuazione del momento di trazione con Google+ - dummies

Metriche sui social media: individuazione del momento di trazione con Google+ - dummies

In i social media, il momento di trazione potrebbe anche essere chiamato il "miglior tempo per condividere su Google+ o altri siti sociali. "Il momento migliore per te potrebbe non essere il momento migliore per i tuoi colleghi generatori di contenuti. (Il merito di questo suggerimento principale va a Christopher Penn che per primo condivise la sua osservazione sulla ricerca ...

Scelta dell'editore

Combinazione di due foto sulla tua Nikon D3400 con sovrapposizione immagini - manichini

Combinazione di due foto sulla tua Nikon D3400 con sovrapposizione immagini - manichini

L'opzione Sovrapposizione immagini sulla Il menu di ritocco di Nikon D3400 consente di unire due foto in una. Questa opzione è stata utilizzata per combinare una foto di un lupo mannaro, mostrato a sinistra, con una scena da giardino notturno, mostrata nel mezzo. Il risultato è l'immagine spettrale mostrata a destra. Oooh, spaventoso! Su ...

Scelta di una modalità Esposizione per una Nikon DSLR - manichini

Scelta di una modalità Esposizione per una Nikon DSLR - manichini

La prima impostazione da prendere in considerazione quando si le riprese con la tua Nikon D3100, D5100 o D7000 sono la modalità di esposizione, che puoi selezionare tramite la ghiera dei modi. La tua scelta determina la quantità di controllo che hai rispetto a due impostazioni di esposizione critiche - diaframma e tempo di posa - oltre a molte altre opzioni, incluse quelle relative ...

Scelta del formato immagine JPEG per una reflex Nikon - dummies

Scelta del formato immagine JPEG per una reflex Nikon - dummies

Offerte Nikon D3100, D5100 o D7000 i due tipi di file comuni nella maggior parte delle fotocamere digitali odierne: JPEG e Camera Raw, o semplicemente Raw in breve, che passa dallo specifico moniker NEF (Nikon Electronic Format) sulle fotocamere Nikon. Il tipo di file, talvolta noto anche come formato file, determina come i dati dell'immagine ...

Scelta dell'editore

Comprensione della struttura delle classi Java - dummies

Comprensione della struttura delle classi Java - dummies

Impossibile creare un'applicazione Java senza creare una classe. Tuttavia, i modi in cui si usano le classi all'inizio quando si apprendono su di essi sono stati relativamente semplicistici - Java è in grado di avere una complessità considerevolmente maggiore, che è il punto di questo capitolo. Le classi hanno una struttura specifica. Proprio come i progetti ...

Come utilizzare i metodi astratti in Java - dummies

Come utilizzare i metodi astratti in Java - dummies

Sia le interfacce che le classi astratte hanno metodi astratti in Java. Ma i metodi astratti giocano ruoli leggermente diversi in questi due tipi di tipi di riferimento. Come puoi tenere tutto dritto nella tua mente? La prima cosa da fare è ricordare che nessuno impara a conoscere i concetti di programmazione orientata agli oggetti senza ottenere molti ...

Come utilizzare l'interfaccia CharSequence in Java - dummies

Come utilizzare l'interfaccia CharSequence in Java - dummies

L'API Java include un'interfaccia utile chiamata CharSequence. Tutte e tre queste classi - String, StringBuilder e StringBuffer - implementano questa interfaccia. Questo metodo esiste principalmente per consentire di utilizzare String, StringBuilder e StringBuffer in modo intercambiabile. A tal fine, molti dei metodi delle classi String, StringBuilder e StringBuffer utilizzano CharSequence come parametro ...