Czy można przesłać dalej deklarację kontenera STL w pliku nagłówkowym? Na przykład, weźmy następujący kod:Przekaż dalej deklaruje kontener STL?
#include <vector>
class Foo
{
private:
std::vector<int> container_;
...
};
Chcę być w stanie zrobić coś takiego:
namespace std
{
template <typename T> class vector;
}
class Foo
{
private:
std::vector<int> container_;
...
};
można to zrobić?
Podążyłem za twoim linkiem do dyskusji, ale ludzie nie wydają się wyciągać wniosków. Najwyraźniej implementacja STL nie może dodawać żadnych parametrów szablonu do standardowych kontenerów. w związku z tym należy zezwolić na przekazanie deklaracji wzoru. – Haplo
Nieokreślone, @Haplo. Jeśli implementacja *, którą używasz, decyduje o zdefiniowaniu zachowania wykraczającego poza to, co mówi standard, jest to świetne, ale wciąż nieokreślone, więc twój kod nie będzie przenośny. Wniosek (sądząc po niezalecanych wypowiedziach) jest taki, że standard powinien na to pozwolić, ale nie, i że są dwa rozwiązania: Zawiń standardowe typy w deklarowane przez użytkownika elementy konstrukcyjne lub po prostu ugryź bullet i dołącz standardowy nagłówek . Ten drugi jest łatwy do zrobienia. –
"Oświadczenia pozostawione bez zastrzeżeń" w grupie Usenet nie są autorytatywnym źródłem. Ale Jerry Coffin ma rację, gdy cytuje [namespace.std]/1. W praktyce, jeśli twój kompilator zdiagnozuje deklaracje 'namespace std' w nagłówkach niesystemowych lub jeśli twoja standardowa biblioteka nie jest zaimplementowana w C++, to możesz mieć problem, ale te rzeczy nigdy się nie zdarzają – Potatoswatter