| Версия для печати темы
Нажмите сюда для просмотра этой темы в оригинальном формате |
| Форум программистов > C/C++: Для новичков > Шаблоны |
| Автор: try_to_get 22.7.2007, 19:16 |
| Что такое шаблоны? Что из себя представляют шаблоны функций и шаблоны классов? Кому не трудно напишите, в общем, и кратко выше указанные вопросы. |
| Автор: Daevaorn 22.7.2007, 19:51 |
| http://ru.wikipedia.org/wiki/%D0%A8%D0%B0%D0%B1%D0%BB%D0%BE%D0%BD_%28%D0%BF%D1%80%D0%BE%D0%B3%D1%80%D0%B0%D0%BC%D0%BC%D0%B8%D1%80%D0%BE%D0%B2%D0%B0%D0%BD%D0%B8%D0%B5%29 |
| Автор: try_to_get 22.7.2007, 21:14 |
| Thanks! |
| Автор: dimanwv 30.3.2012, 08:34 |
| такой вопрос. template <typename T> void show(const char *msg,vector<T> vect) { cout<<msg; for(unsigned i=0;i<vect.size();++i) cout<<vect[i]<<" "; cout<<"\n"; } vector<int> copied(5); show<int>("Vector have been sorted :",copied);// здесь в угловых скобках указываем тип. /////////////////////////////////////////////////////////// template<typename InIter> void show_range(const char* msg,InIter start,InIter end) { InIter itr; cout<<msg; for(itr=start;itr!=end;++itr) cout<<*itr<<" "; cout<<endl; } vector<double> trans_v; for(trans_i=0;trans_i<10;++trans_i) trans_v.push_back(static_cast<double>(trans_i)); cout<<"The demonstration \"transform\" algorithm using one vector.\n"; show_range("The initial content of \"trans_v\" is :\n",trans_v.begin(),trans_v.end());//здесь в не применяем угловые скобки почему? |
| Автор: borisbn 30.3.2012, 10:08 |
| dimanwv, для функций почти никогда не нужно указывать тип инстанцирования явно. А вот для классов - обязательно. Компилятор сам "сообразит" какой тип ты имел в виду. Если же тип не подойдёт, то компилятор ругнётся, как, впрочем, если ты явно укажешь несоответствующий тип. Кстати, в твоём случае для функции show необязательно указывать тип. http://liveworkspace.org/code/96f0209d92649342e328424664f8c7d7 |
| Автор: dimanwv 30.3.2012, 23:03 |
| Спасибо. Понял. |
| Автор: sergioK1 31.3.2012, 12:11 | ||||
1) где разница между двумя примерами ? 2) зачем тут вообще template ?
|
| Автор: sergioK1 31.3.2012, 13:02 | ||||
мой работает, твое изменение - нет , хочешь добавить чего пользуй визитор , не совсем точьно выразился, в таких случаях лучше пользовать void* а в самой функции делать фактори на тип , так багу в перегруженом << поймать легче, ну и размер кода поменьше xм .. может у меня привычка многолетняя из других языков без шаблонов писать (там их просто небыло) но мне кажеться она хорошая , шаблоны они несколько для другого Но это уже не для новичков, раздела парадигмы програмирования на форуме к сожалению нет , а это для туда классика IMHO. |
| Автор: borisbn 31.3.2012, 13:16 | ||
| sergioK1, функция show из первого примера умет распечатывать любой вектор, элементы которого умеет принимать оператор << ostream'а Даже из таких элементов
http://liveworkspace.org/code/4faa30d0137702de88e006daac2e2a39 |
| Автор: sergioK1 31.3.2012, 13:27 | ||
Я о другом Кстати, в твоём случае для функции show необязательно указывать тип. http://liveworkspace.org/code/96f0209d9264...328424664f8c7d7 запутался какой прмер первый , какой второй ? где он указан и где можно не указать ? |
| Автор: boostcoder 31.3.2012, 14:03 |
| sergioK1, ты когда-нибудь перестанешь на всех форумах рунета постить бессмысленные вопросы? |
| Автор: borisbn 31.3.2012, 17:24 |
| sergioK1, действительно, сумбур какой-то... Можно не указывать тип практически всегда. Компилятор сам разберётся какой тип нужен. Вот вариант, когда тип нужно указывать явно http://liveworkspace.org/code/b2ce6674e59058193b979d7270dc493d |
| Автор: sergioK1 31.3.2012, 18:50 |
дайте ссылку на стандард языка, только не на последний, |