Я хотел бы написать функцию, которая будет принимать контейнер stl (как набор, вектор или список) , а затем перебирать содержимое и затем добавлять их к и верните строку.Как templatize функция на контейнере stl, который имеет итератор
Нечто подобное.
// I dont know how to do this. Just using stl::container for meanings sake Not sure if such a thing exists?
template<typename T, typename Container = stl::container<T> >
void JoinToString(const Container<T> cont, const char * delim, string &str)
{
stringstream s;
Container<T>::const_iterator it = cont.begin, last = cont.end();
while(it != last)
{
s<<(*it);
++it;
if(it == last)
break;
s<<delim;
}
str = s.str();
}
Я хочу что-то в этом роде. Не знаете, как написать такой код.
Прохождение шаблона не является тривиальным. Для начала ваш код не будет работать во всех стандартных компиляторах, так как контейнер 'std :: vector' принимает как минимум два аргумента типа. Тогда проблема в том, что стандарт позволяет реализациям добавлять дополнительные параметры до тех пор, пока они дефолтны, то есть в идеально соответствующей реализации, 'std :: vector' может иметь 3, 4, 5 ... аргументы. –
Параметры шаблона шаблона сложны в использовании и обслуживании, и по разным причинам, в том числе один Дэвид указывает, они не добавляют многого. Я никогда не чувствовал необходимости достигать одного в производственном коде. –