Ну, вы могли бы сделать класс, который принимает тип T в качестве параметра, что-то вроде этого
Foo (тип: *)
И затем во всех методах, из которых вы можете добавлять элементы в класс Vector, я возбуждаю исключение, если тип объекта, передаваемого методу, не совпадает с типом, который я определил, когда создавал свой векторный класс.
При этом, вероятно, вы не получите очень хорошую производительность от такого класса, поскольку каждый раз, когда вы обрабатываете объект, вам нужно проверять его реальный тип во время выполнения, где, как в C ++, классы шаблонов создаются во время компиляции, поэтому проверка типа во время выполнения не требуется.