L>>Насколько это общепринятая практика? Я имею в виду:
L>>
L>>namespace std
L>>{
L>> template class string<...>;
L>> template class vector<...>;
L>>}
L>>
АШ>Пространства имен были введены для решения проблемы конфликта имен. Поэтому это даже не общепринятая, а единственно возможная практика в условиях мультибиблиотечкой среды:
Это понятно. Насколько часто встречается в коде именно не включение "mylib.h" и "yourlib.h", а
объявление функций и классов в них содержащихся? В заголовочных файлах. С целью ускорить компиляцию программы.
// main.h
// #include <vector>
// #include "yourlib.h"
namespace std
{
template class vector<...>;
}
namespace yourlib
{
class foo{};
}
void bar(std::vector<yourlib::foo> vf);
Если я правильно понимаю, то для стандартных контейнеров это сдеалть не так просто, потому что реальное количество параметров в них может зависеть от реализации STL (то есть, может быть vector<T, allocator<T>, NonDocumentedParametr = DefaultND>)...
... << RSDN@Home 1.1.4 stable SR1 rev. 568>>