Здравствуйте, AlexDed, Вы писали:
AD>Здравствуйте, Bell, Вы писали:
B>>Здравствуйте, Аноним, Вы писали:
B>>Комо компилит этот пример без проблем, и выбипает правильную функцию. B>>VC 7.1 не компилит.
AD>Спасибо понял, работать должно, но не работает
Ну, нет в мире совершенства...
Любите книгу — источник знаний (с) М.Горький
Поиск подходящей функции
От:
Аноним
Дата:
21.02.06 09:49
Оценка:
Приведенный ниже код не компиляется. Объясните пожалуйста, почему не происходит правильного выбора подходящей функции (как например в случае отстутвия шаблонов). Спасибо.
void fun( int ) {}
template< void( *func )( int ) >
void f( int ) {}
template< void( *func )( int* ) >
void f( int* ) {}
int main()
{
f<&fun>( 1 );
}
Здравствуйте, Аноним, Вы писали:
А>Приведенный ниже код не компиляется. Объясните пожалуйста, почему не происходит правильного выбора подходящей функции (как например в случае отстутвия шаблонов). Спасибо.
А>
У Вас аргумент шаблона указатель на функцию. Агрументом шаблона может быть (если не ошибаюсь): тип, константа интегрального типа типа int (даже кажется double запрещен), константная ссылка на статический объект. Вы же пытаетесь в качестве аргумента передедать указатель на функцию, а указатели передавать нельзя.
Здравствуйте, Аноним, Вы писали:
А>Приведенный ниже код не компиляется.
На каком компиляторе?
Re[2]: Поиск подходящей функции
От:
Аноним
Дата:
21.02.06 10:04
Оценка:
Здравствуйте, shank, Вы писали:
S>Здравствуйте, Аноним, Вы писали:
А>>Приведенный ниже код не компиляется.
S>На каком компиляторе?
vs 2003, 2005
Re[2]: Поиск подходящей функции
От:
Аноним
Дата:
21.02.06 10:05
Оценка:
Здравствуйте, m_n, Вы писали:
m_n>У Вас аргумент шаблона указатель на функцию. Агрументом шаблона может быть (если не ошибаюсь): тип, константа интегрального типа типа int (даже кажется double запрещен), константная ссылка на статический объект. Вы же пытаетесь в качестве аргумента передедать указатель на функцию, а указатели передавать нельзя.
нет, дело не в этом. Указатель на функцию может быть параметром шаблона.
Re[2]: Поиск подходящей функции
От:
Аноним
Дата:
21.02.06 10:08
Оценка:
Здравствуйте, ekamaloff, Вы писали:
E>Здравствуйте, Аноним, Вы писали:
E>А так чем не угодило:
E>
Здравствуйте, Аноним, Вы писали:
А>Здравствуйте, m_n, Вы писали:
m_n>>У Вас аргумент шаблона указатель на функцию. Агрументом шаблона может быть (если не ошибаюсь): тип, константа интегрального типа типа int (даже кажется double запрещен), константная ссылка на статический объект. Вы же пытаетесь в качестве аргумента передедать указатель на функцию, а указатели передавать нельзя.
А>нет, дело не в этом. Указатель на функцию может быть параметром шаблона.
Здравствуйте, Аноним, Вы писали:
А>Приведенный ниже код не компиляется. Объясните пожалуйста, почему не происходит правильного выбора подходящей функции (как например в случае отстутвия шаблонов). Спасибо.
А>
Комо компилит этот пример без проблем, и выбипает правильную функцию.
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;
}
Здравствуйте, Аноним, Вы писали:
А>Приведенный ниже код не компиляется. Объясните пожалуйста, почему не происходит правильного выбора подходящей функции (как например в случае отстутвия шаблонов). Спасибо.
А>
Здравствуйте, Bell, Вы писали:
B>Здравствуйте, Аноним, Вы писали:
B>Комо компилит этот пример без проблем, и выбипает правильную функцию. B>VC 7.1 не компилит.
Здравствуйте, Dmitry Kotlyarov, Вы писали:
DK>Здравствуйте, Bell, Вы писали:
B>>Комо компилит этот пример без проблем, и выбипает правильную функцию.
DK>gcc 4.0.2. тоже компилит без проблем и выбирает правильную ф-цию.
Чтож, остается только позавидовать счастливым обладателям Comeau и gcc 4.0.2...