C++ Шаблоны Функций

dimanwv

New member
30.03.2012
4
0
#1
такой вопрос.
template <typename T>
void show(const char *msg,vector<T> vect)
{
cout<<msg;
for(unsigned i=0;i<vect.size();++i)
cout<<vect<<" ";
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());//здесь в не применяем угловые скобки почему?
 
G

Guest

#2
В первом случае явно указывается специализация шаблонной функции.
Для приведенного кода отличий не будет.

Пример из MSDN:
C++:
// function_templates2.cpp
template<class T> void f(T) {}
int main(int j) {
f<char>(j);  // Generate the specialization f(char).
// If not explicitly specified, f(int) would be deduced.
}
 

dimanwv

New member
30.03.2012
4
0
#3
В первом случае явно указывается специализация шаблонной функции.
Для приведенного кода отличий не будет.

Пример из MSDN:
C++:
// function_templates2.cpp
template<class T> void f(T) {}
int main(int j) {
f<char>(j);  // Generate the specialization f(char).
// If not explicitly specified, f(int) would be deduced.
}
Я извиняюсь просто, странно что сработало без явной специализации шаблона во втором случае.
Почему работает в этих двух случаях?
show_range<vector<double>::iterator >("The initial content of \"trans_v\" is :\n",trans_v.begin(),trans_v.end());
то есть работает и так
show_range("The initial content of \"trans_v\" is :\n",trans_v.begin(),trans_v.end());
Понял, что для функций не надо указывать спецификацию шаблона.
Я, не очень четко сформулировал вопрос.