Estoy creando un constructor que tomará un par de iteradores de entrada. Quiero que la firma del método para tener tiempo de compilación const
semántica similar a:¿Cómo requiero semantics const_iterator en una firma de función de plantilla?
DataObject::DataObject(const char *begin, const char *end)
Sin embargo, no puedo encontrar ningún ejemplo de esto. Por ejemplo, el constructor de mi rango de aplicación de STL para vector
se define como:
template<class InputIterator>
vector::vector(InputIterator first, InputIterator last)
{
construct(first, last, iterator_category(first));
}
que no tiene tiempo de compilación const
garantías. iterator_category
/iterator_traits<>
no contienen nada relacionado con const
, tampoco.
¿Hay alguna manera de indicar para garantizar al llamante que no puedo modificar los datos de entrada?
edición, 2010-02-03 16:35 UTC
Como un ejemplo de cómo me gustaría utilizar la función, me gustaría ser capaz de pasar un par de punteros char*
y saber, en función de la firma de la función, los datos a los que apuntan no se modificarán.
Esperaba poder evitar crear un par de punteros const char*
para garantizar la semántica de const_iterator. Puedo ser obligado a pagar el impuesto de plantilla en este caso.
¿Es este el tipo de cosas para las cuales los conceptos aplicados por el compilador serían buenos? No recuerdo si la propuesta decía algo acerca de los requisitos de const. – mskfisher
Creo que la mejor opción posible en este momento es crear una instancia explícita de la función usando 'const char *' y confiar en eso como mi verificación en tiempo de compilación para todos los demás tipos. – mskfisher