Здравствуйте, Аноним, Вы писали:
А>Приведенный ниже код не компиляется. Объясните пожалуйста, почему не происходит правильного выбора подходящей функции (как например в случае отстутвия шаблонов). Спасибо.
А>А>void fun( int ) {}
А>template< void( *func )( int ) >
А>void f( int ) {}
А>template< void( *func )( int* ) >
А>void f( int* ) {}
А>int main()
А>{
А> f<&fun>( 1 );
А>}
А>
Комо компилит этот пример без проблем, и выбипает правильную функцию.
VC 7.1 не компилит.
Простейшее решение — сделать шаблон класса и в нем перегрузить функции:
void fun( int ) {}
template< void( *func )( int ) >
struct fs
{
static int f(int) { return 0;}
static int f(int*) { return 1;}
};
int main()
{
fs<fun>::f( 1 );
return 0;
}