Набор текста вектора <object>в C ++? - PullRequest
1 голос
/ 30 октября 2010

У меня есть два класса, препятствие и boid, boid наследует от препятствия.

Теперь я хочу написать некоторые функции, которые могут работать с объектами обоих классов, так что передача vector<boid> работает так же, какvector<obstacle>.

Когда я произвожу это так и пытаюсь получить доступ к размеру вектора, я получаю число 1840700394 вместо 60:

vector<boid>* boids; ....
cout << ((vector<obstacle>*)boids)->size() << endl;

Я также пробовал "reinterpret_cast", нота же проблема.

Ответы [ 3 ]

7 голосов
/ 30 октября 2010

Шаблоны C ++ не похожи на шаблоны C # и Java.Создание экземпляра шаблона является полным классом и никак не связано с другими созданиями шаблона.Нельзя разыгрывать между ними.

(Примечание: если бы вы использовали static_cast, вместо этого он поймал бы это для вас ....)

3 голосов
/ 30 октября 2010

Простой способ решить эту проблему - использовать std::vector<obstacle *>. Затем вы можете заполнить свой вектор указателями на любой объект, который наследуется от препятствия.

3 голосов
/ 30 октября 2010

Нельзя привести вектор к другому типу вектора, подобного этому. Если вам нужна универсальная функция, которая работает с обоими типами объектов, вы можете использовать шаблон функции.

template <typename T>
void func(const std::vector<T>& vec)
{
  ....
}

Эта функция будет принимать вектор, содержащий объект любого типа.

Также см. Комментарий Роджера Пэйта ниже. Вы можете позволить функции принимать любой тип контейнера (или любой объект, который реализует соответствующую семантику), просто сказав:

template <typename T>
void func(const T& container) { ... }
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...