LINUX.ORG.RU

История изменений

Исправление alysnix, (текущая версия) :

Ну вот по сути же те же array и vector одни и те же типы представляют - линейную коллекцию данных…

компилятор должен сгенерировать код вызова функций - например push_back() этих коллекций. но это разные функции для разных коллекций. они они только внешне выглядят одинаково. и поскольку он не понимает - какой обьект будет подставлен, он не знает какую функцию вызывать. то есть такие трюки не могут быть обрабаны компилятором. потому такие классы, с внешне одинаковыми функцяими не являются совместимыми.

но если будет шаблон, то компилдятор вычислит тип подставленного параметра и сгенерит код шаблона для данного типа, и будет уже знать - чей push_back в нем вызывать.

стандартные контейнеры в с++ имеют внешне одинаковые методы для того, чтобы по-простому писать темплейты с данными контейнерами, или легкой подмены одного контейнера другим в коде. то есть тип ручками поменял, а использующий код не поменялся, поскольку заголовки функций те же.

Исходная версия alysnix, :

Ну вот по сути же те же array и vector одни и те же типы представляют - линейную коллекцию данных…

компилятор должен сгенерировать код вызова функций - например push_back() этих коллекций. но это разные функции для разных коллекций. они они только внешне выглядят одинаково. и поскольку он не понимает - какой обьект будет подставлен, он не знает какую функцию вызывать. то есть такие трюки не могут быть обрабаны компилятором. потому такие классы, с внешне одинаковыми функцяими не являются совместимыми.

но если будет шаблон, то компилдятор вычислит тип подставленного параметра и сгенерит код шаблона для данного типа, и будет уже знать - чей push_back в нем вызывать.