C'è una biblioteca gruppo di lavoro questione irrisolta su questo uniform_int_distribution<unsigned char> should be permitted e dice, tra le altre cose:
io non sono a conoscenza di nulla in <random>
che funziona con 16 bit interi, ma non riesce con 8- bit interi, quindi sospetto che IntType
e UIntType
possano essere semplicemente estesi per consentire la famiglia di caratteri. In alternativa, questa modifica potrebbe essere limitata a uniform_int_distribution da solo, dove è sicuramente sicuro. Un esperto di <random>
dovrebbe decidere quale modifica è la migliore.
La soluzione proposta è modificare la restrizione per permettere tipi interi standard:
che ha un parametro di tipo modello definito IntType
è indefinito meno l'argomento modello corrispondente è cv-qualificato ed è aa tipo standard intero (3.9.1 [basic.fundamental]
e:
che ha un parametro di tipo di modello di nome UIntType
è indefinito meno che l'argomento del modello corrispondente è cv-qualificato ed è un tipo standard di intero senza segno (3.9.1 [basic.fundamental])
In questo modo si ottiene unsigned/firmato char anche se non uint8_t o int8_t ma sono probabilmente equivalenti. Sono stati esclusi i tipi integrali estesi per semplificare la formulazione e massimizzare il consenso:
Questo esclude anche i tipi di integrale esteso e i tipi di caratteri wide, che sembrano molto belli da avere. Non ho alcuna obiezione a sostenere nessuno di questi tipi; Ho scelto questo per semplificare la formulazione e, si spera, massimizzare il consenso.
Nota, questo esclude char
dal momento che è l'attuazione definito se char
è firmato o meno.
Nota questo argomento è stato richiamato anche nello std-discussion list.
Jonathan Wakely nota questa proposta è controversa e ha commentato che le sue note dall'ultima discussione sono i seguenti:
che era molto sicuramente intenzionale che interi singolo byte non sono supportati, non un'omissione accidentale, e quindi dovremmo essere attenti solo cambiando che senza consultare i progettisti del C++ 11
Egli suggerisce di aggiungere un membro per random_device
per fornire singoli byte, che è sembra una ragionevole alternativa.
Non è 'int8_t' - se l'implementazione lo fornisce a tutti - necessariamente un' typedef' a uno degli interi elencati? – 5gon12eder
@ 5gon12eder è probabile che sia stato firmato char che in effetti manca da quella lista. –
[Ho chiesto _std-discussion_ su questo una volta] (https://groups.google.com/a/isocpp.org/d/msg/std-discussion/rOzm69RSNcg/aIqYf__XJb0J). –