Problem nie polega na tym, że nie można przesłać dalej deklaracji klasy szablonu. Tak, musisz znać wszystkie parametry szablonu i ich wartości domyślne, aby móc poprawnie zadeklarować je dalej:
namespace std {
template<class T, class Allocator = std::allocator<T>>
class list;
}
Ale nawet taka deklaracja forward namespace std
jest wyraźnie zabroniona przez standard: jedyną rzeczą, którą możesz wprowadzić, std
jest specjalizacja szablonu , zwykle std::less
w typie zdefiniowanym przez użytkownika. W razie potrzeby ktoś inny może zacytować odpowiedni tekst.
Po prostu #include <list>
i nie martw się o to.
Aha, nawiasem mówiąc, każda nazwa zawierająca podwójne podkreślenie jest zarezerwowana do użytku przez implementację, więc powinieneś użyć czegoś takiego jak TEST_H
zamiast __TEST__
. Nie wygeneruje ostrzeżenia ani błędu, ale jeśli w programie występuje konflikt z identyfikatorem zdefiniowanym w ramach implementacji, nie ma gwarancji, że skompiluje się lub uruchomi się poprawnie: jest źle sformułowany . Zabronione są również nazwy zaczynające się między innymi od podkreślenia, po którym następuje duża litera. Ogólnie rzecz biorąc, nie zaczynaj rzeczy od podkreślenia, chyba że wiesz, z jaką magią masz do czynienia.
std::allocator<T>