Mam dwa i pół ściśle ze sobą powiązane pytania. Podano parametr iteratora STL przekazany jako parametr szablonu:Sprawdź/zmodyfikuj iterator "constness"
- Jak ustalić, czy typ odpowiada stałowodziejowi lub stałemu iteratorowi?
- Alternatywnie do 1., jak nałożyć (używając na przykład
enable_if
s), że ten typ odpowiada niestanowiącemu stałej iteracji? Jak uzyskać constendę iteratora z nie stałej (i na odwrót:)?[Uwaga: odebrano w this post; nic dziwnego, nie możesz. ]
Skąd to pytanie pochodzi z:
napisałem małą klasę, aby ułatwić arytmetycznych/relacyjnych/operacje algebraiczne na wektorach (przez wektor Znaczy 1d danych o stałym rozmiarze, a nie Wektory STL). Zamiast narzucać określony kontener danych, zdefiniowałem interfejs i wyprowadziłem kilka możliwych kontenerów, które zasadniczo "zawijają" różne sposoby przechowywania danych. Jednym z tych kontenerów jest wrapper dla Iteratorów STL i mam z tym pewne problemy.
Można zacząć od ['std :: is_const'] (http://en.cppreference.com/w/cpp/types/is_const). –
BoBTFish
@BoBTFish Próbowałem, ale nie działa. 'const_iterator' i' const iterator' to dwie różne rzeczy. Spróbuj tego: http://pastebin.com/kKQEQthj – Sheljohn
@BoBTFish Przepraszamy, edytowałeś swój komentarz? Mógłbym przysiąc, że nie widziałem "decltype (* it)", kiedy opublikowałem moją ostatnią uwagę. Z pewnością byłbyś z tym dobry :) – Sheljohn