Implementacja std::vector
dostarczana z Visual Studio 2010 i wcześniejszymi wersjami ma dobrze znaną specyfikację: metoda resize
ma następujący podpis (zgodny z C++ 03) :Samodzielna, zgodna z STL implementacja std :: vector
void resize(size_type new_size, value_type value);
zamiast podpisu C++ 11 zgodnym, który jest używany przez większość innych implementacjach STL (jak STL gcc lub STLport) długości, po czym C++ 11:
void resize(size_type new_size, const value_type& value);
The Problem z pierwszym wariantem polega na tym, że w niektórych sytuacjach ia, to nie skompilować jeśli value_type
posiada specyfikację wyrównania:
struct __declspec(align(64)) S { ... };
std::vector<S> v; // error C2719: '_Val': formal parameter with __declspec(align('64')) won't be aligned
To wellknown problemem bez zadowalającego obejście oprócz używając innej realizacji std::vector
.
szukam dobrze napisana, dobrze przetestowany, samowystarczalnego i STL kompatybilne realizacji std::vector
z licencją MIT stylu, że mogę wpaść do mojego projektu jako pojemnik z wyboru Wyrównany typy.
Rozważałem wyodrębnienie go ze STLport lub STL-a gcc, ale będąc w pełni zgodnym z normą, oba są duże i zawierają wiele nietrywialnych zależności.
(byłbym całkowicie zadowolony z realizacji rozsądnym podzbioru std::vector
które obsługują tylko push_back
, clear
, capacity
, size
, reserve
, resize
, swap
i indeksowania tablicy.)
Jakieś pomysły?
Nie widzę, jak metoda '.resize()' powoduje, że deklaracja 'std :: vector
v;' kończy się niepowodzeniem. Tworzenie instancji szablonu klasy nie tworzy instancji swoich metod, tylko tych używanych. (Tj. Domyślny ctor i dtor w tym przypadku). – MSaltersDomyślam się, że błąd jest emitowany podczas parsowania ... Należy pamiętać, że mówimy tutaj o naprawdę specyficznym dla kompilatora problemie. –