Автономная, совместимая с STL реализация std::vector

Реализация std::vector, поставляемая с Visual Studio 2010 и более ранними версиями, имеет Хорошо известная особенность: метод resize имеет следующую сигнатуру (совместимую с C++03):

void resize(size_type new_size, value_type value);

вместо сигнатуры, совместимой с C++11, которая использовалась в большинстве других реализаций STL ( как STL или STLport в gcc) задолго до C++11:

void resize(size_type new_size, const value_type& value);

Проблема с первым вариантом заключается в том, что в некоторых ситуациях он не сможет скомпилироваться, если value_type имеет спецификацию выравнивания:

struct __declspec(align(64)) S { ... };
std::vector v;  // error C2719: '_Val': formal parameter with __declspec(align('64')) won't be aligned

Это хорошо известная проблема, для которой нет удовлетворительного обходного пути, кроме использования другой реализации std:: вектор.

Я ищу хорошо написанную, хорошо протестированную, автономную и STL-совместимую реализацию std::vector с лицензией в стиле MIT, которую я мог бы использовать. мой проект в качестве предпочтительного контейнера для выровненных типов.

Я думал извлечь его из STLport или gcc STL, но, будучи полностью совместимыми со стандартами, они оба большие и имеют много нетривиальных зависимостей.

(Я был бы совершенно доволен реализацией разумного подмножества std::vector, которое поддерживало бы только push_back, clear, емкость, размер, резерв, изменение размера, своп и индексирование массива.)

Есть идеи?

7
задан François Beaune 23 February 2012 в 08:40
поделиться