Sto creando un costruttore che prenderà una coppia di iteratori di input. Voglio la firma del metodo di avere in fase di compilazione const
semantica simile a:Come si richiede la semantica const_iterator in una firma di funzione modello?
DataObject::DataObject(const char *begin, const char *end)
Tuttavia, non riesco a trovare alcun esempio di questo. Per esempio, il costruttore gamma di mia implementazione STL per vector
è definito come:
template<class InputIterator>
vector::vector(InputIterator first, InputIterator last)
{
construct(first, last, iterator_category(first));
}
che non ha tempo di compilazione const
garanzie. iterator_category
/iterator_traits<>
non contengono nulla in relazione allo const
.
C'è un modo per indicare per garantire al chiamante che non posso modificare i dati di input?
modificare, 2010-02-03 16:35 UTC
Come esempio di come vorrei utilizzare la funzione, mi piacerebbe essere in grado di passare un paio di char*
puntatori e sapere, in base alla firma della funzione, che i dati a cui puntano non verranno modificati.
Speravo di evitare di creare un paio di puntatori const char*
per garantire la semantica di const_iterator. In questo caso potrei essere costretto a pagare la tassa modello.
È questo il tipo di cosa a cui i concetti imposti dal compilatore sarebbero utili? Non ricordo se la proposta dicesse qualcosa sui requisiti const. – mskfisher
Penso che la migliore opzione possibile a questo punto sia di istanziare esplicitamente la funzione usando un 'const char *' e fare affidamento su di esso come controllo di compilazione per tutti gli altri tipi. – mskfisher