Наиболее типичный способ хранения информации и типе данных контейнера – внутри самого контейнера, типичный пример std::vector<T>, который сам знает что хранит. Впрочем, почти все остальные библиотеки с контейнерами (честно говоря, еще час назад я считал что вообще все) поступают аналогичным образом
И тут я взялся за книгу по OpenCV и офигел... как я понял (может, я что-то не так понял?) основной контейнер cv::Mat хранит массив байт и в довесок к этому имеет набор шаблонных функций at<T>()/ptr<T>(), которые уже и вычисляют реальное расположение элемента и возвращают его значение/адрес.
Внимание, вопрос... с какой целью тип данных был вынесен из контейнера? Если можно, хотелось бы увидеть какие-то реальные сценарии использования, где это главная фича без которой никак.