W ramach zespołu programistów chciałem zapewnić, że zestaw funkcji (i operatorów) jest zaimplementowany w niestandardowych iteratorach, które publikujemy. Używanie typów iteratorów STL jako typów bazowych pomaga, jednak z pewnych powodów (poza moją kontrolą) postanawiamy nie wymuszać zgodności STL. Iteratory są zużywane przez ten sam zespół i przez ludzi w całej firmie.static_assert w celu zapewnienia kontraktu projektowego
Chciałem zaprojektować klasę szablonów, która pochłania typ iteratora i testuje na podstawie umowy projektowej.
Na przykład, spodziewałbym się, że iterator będzie implementował operator ++, operator--, a także zadeklaruje wymagane typy.
1> Czy możliwe jest wdrożenie takiej klasy szablonów, która wymusza zawarcie umowy projektowej? prawdopodobnie przy użyciu static_assert?
2> Jeśli tak, czy to dobry projekt?
referencyjny: custom iterator
http: //www.boost.org/doc/libs/1_48_0/libs/type_traits/doc/html/boost_typetraits/category/value_traits/operators.html może? – BoBTFish
[Ładna drukarka] (http://stackoverflow.com/q/4850473/596781) ma klasę cech C++ 11, aby sprawdzić, czy typ zawiera typy iteracyjne i funkcje 'begin' /' end', które zwracają ten iterator rodzaj. –
@Kerrek Dzięki za przykład. Uratowałem kilka godzin roboczych. :) – Ram