Я думаю, Base
- это базовый класс InheritedContainer
, но не std::vector<int>
.Как мы знаем, std::vector
не определяется следующим образом:
class vector : Base {...
Можно ожидать следующее наследование:
class InheritedContainer : Base, std::vector<int>, ... {...
Однако в этом случае приведение от *От 1011 * до vector<int>
является перекрестным броском, поэтому этого нельзя сделать с помощью static_cast
.
Как вы, возможно, знаете, допускается следующее:
InheritedContainer container;
Base& bref = container;
InheritedContainer& iref = static_cast<InheritedContainer&>(bref);
std::vector<int>& vi = iref;
std::vector<char>& vc = iref;
Если вы можетеподготовьте get_container
, my_int_func
и my_char_func
, вероятно, типы, для которых будет std::vector
, известны заранее.Если это так, я полагаю, что целесообразно все время удерживать InheritedContainer&
вместо Base&
.
Если вам нужно привести Base
к vector<T>
, возможно RTTI (например, добавив виртуальную функцию к Base
)и dynamic_cast
включит приведение.