Вы не можете добавить const
на любом данном уровне.Различные экземпляры шаблона - это разные несвязанные типы, vector<T>
не связан с vector<const T>
, и нет способа приведения от одного к другому.
Вы можете,с другой стороны, создайте другой вектор и просто скопируйте содержимое, но это может быть дорого, так как вам придется копировать все различные содержащиеся в нем векторы.
Кстати, если вы возвращаете константную ссылку навнешний вектор, ссылка const будет вести себя как: const std::vector< const std::vector< Foo * const > >&
, обратите внимание, что из-за семантики значений, связанных с типами в C ++, const-ness распространяется in. Проблема заключается в том, что значение хранится во внутреннейvector - это указатель, и его постоянство не делает указатель на объект постоянным.Точно так же поведение вашего getFoos(int)
будет эквивалентно const std::vector< Foo * const >&
.Обратите внимание, что поведение не актуально типы .