Tworzę konstruktor, który zajmie parę iteratorów wejściowych. Chcę podpis sposób mieć kompilacji const
semantyka podobny do:Jak wymagać semantyki const_iterator w sygnaturze funkcji szablonu?
DataObject::DataObject(const char *begin, const char *end)
Jednak nie mogę znaleźć żadnych przykładów. Na przykład, konstruktor zakres mojego STL implementacja dla vector
jest zdefiniowany jako:
template<class InputIterator>
vector::vector(InputIterator first, InputIterator last)
{
construct(first, last, iterator_category(first));
}
który nie ma czasu kompilacji const
gwarancje. iterator_category
/iterator_traits<>
również nie zawierają nic związanego z const
.
Czy istnieje sposób wskazania, aby zagwarantować dzwoniącemu, że nie mogę zmodyfikować danych wejściowych?
edycja, 2010-02-03 16:35 UTC
Jako przykład jak chciałbym korzystać z funkcji, chciałbym być w stanie przejść parę char*
wskaźników i wiem, na podstawie podpisu funkcji, że dane, na które wskazują, nie zostaną zmodyfikowane.
Miałem nadzieję, że uda mi się uniknąć utworzenia pary wskaźników const char*
, aby zagwarantować semantykę const_iterator. W tym przypadku mogę zostać zmuszony do zapłaty podatku od szablonów.
Czy tego rodzaju rzeczy byłyby dobre dla koncepcji kompilatorowych? Nie pamiętam, czy propozycja mówi cokolwiek o wymaganiach stałych. – mskfisher
Myślę, że najlepszą możliwą opcją w tym momencie jest jawne utworzenie instancji za pomocą 'const char *' i poleganie na tym jako sprawdzanie w czasie kompilacji dla wszystkich innych typów. – mskfisher