Реализация std::vector
, которая поставляется с Visual Studio 2010 и более ранними версиями, имеет хорошо известную особенность: метод resize
имеет следующую подпись (совместимый с C++ 03) :Автономная, STL-совместимая реализация std :: vector
void resize(size_type new_size, value_type value);
вместо C++ 11-совместимом подпись, которая использовалась большинством других реализаций STL (например, STL GCC или STLport) задолго до того, C++ 11:
void resize(size_type new_size, const value_type& value);
проблема с первым вариантом заключается в том, что в некоторых ситуациях ЦИИ, он не будет компилироваться, если value_type
имеет спецификацию выравнивания:
struct __declspec(align(64)) S { ... };
std::vector<S> v; // error C2719: '_Val': formal parameter with __declspec(align('64')) won't be aligned
Это wellknown проблема не удовлетворительного решения проблемы, кроме использования другой реализации std::vector
.
Я ищу хорошо написанные, хорошо испытанные, самодостаточные и STL-совместимые реализации std::vector
с лицензией MIT стиле, что я мог упасть в мой проект в качестве контейнера для выбора выровненных типы.
Я считал, что извлечение его из STLport или gcc STL, но, будучи полностью стандартным, они оба большие, с множеством нетривиальных зависимостей.
(я был бы совершенно счастлив с реализацией разумного подмножества std::vector
, которые поддерживают только push_back
, clear
, capacity
, size
, reserve
, resize
, swap
и индексации массива.)
Любые идеи?
Я не вижу, как метод '.resize()' вызывает 'std :: vector
v;' Объявление сбой. Создание экземпляра шаблона класса не создает его методы, а только те, которые используются. (I.e. по умолчанию ctor и dtor в этом случае). – MSaltersЯ предполагаю, что ошибка возникает во время разбора ... Имейте в виду, что мы говорим о конкретной проблеме, связанной с компилятором. –