Я режу зубы при программировании некоторых шаблонов, и я очень новичок в этом.Я хочу реализовать несколько классов CRTP, которые содержат контейнер STL.Пусть class A{};
послужит примером для базового класса (времени компиляции), из которого class B{};
и class C{};
"получены" во время компиляции, следуя стилю CRTP.
Теперь оба B
и C
будет содержать контейнеры.Для целей примера пусть это будут std::vector
и std::set
соответственно.Теперь я хочу представить их итераторы через begin()
и функцию end()
, которая предоставляет прямой итератор.Однако я не хочу раскрывать, какой именно контейнер находится внутри B
и C
, и я хочу определить эти функции для A
, чтобы во время вызова правильный для B
и C
привыкнуть.
Возможно ли это?Прямо сейчас мой план состоит в том, чтобы иметь Iterator
внутренний класс для B
, а также C
, который будет содержать фактический итератор (вектор или набор в зависимости от обстоятельств) и делегировать ему вызов.Однако, похоже, что это много реплицированного клея-кода, и я подозреваю, что есть лучший вариант.
У меня есть пара вопросов:
Как мне объявитьвнутренние выражения в A
, B
и C
, так что они хорошо работают с CRTP.Нужно ли копировать его для A
, B
и C
?Может ли это быть пустой класс в A
, и я маскирую их в B
и C
со специализированными реализациями?
Как я могу представить итератор с меньшим количеством клея и меньшим дублированием?
Я не хочу создавать зависимости с внешними библиотеками, такими как boost, и хочу придерживаться только std.Поэтому я должен реализовать все, что мне нужно, самому.Спасибо за помощь.