Читал Страуструпа, много думал, но не все понял.
Явная специализация нужна для задания поведения шаблонной функции специфичного для переданных параметров, так? Причем функция выводится по параметрам.
Допустим, я хочу написать шаблонную функцию сравнения и реализовать две специализации. Одну принимающие сами объекты, а другую — указатели на объекты.
То есть, идея такая:
template<class T> bool cmp(T a, T b) {
cout << "General template function called" << endl;
return (a<b);
}
template<class T> bool cmp(const T* a, const T* b) {
cout << "Pointer template function called" << endl;
return (*a<*b);
}
int j=5, i=7;
cmp(g, j);
cmp(&g, &j);
Разумеется, ничего не выходит — оба раза вызывается первая функция. Как-то можно вызвать требуемую? Или я вообще ничего не понял вовсе?
Спасибо.