Re: Поиск подходящей функции
От: ekamaloff Великобритания  
Дата: 21.02.06 10:04
Оценка: 2 (1)
Здравствуйте, Аноним, Вы писали:

А так чем не угодило:

void fun( int ) {}

void f( int, void( *func )( int ) ) {}

void f( int*, void( *func )( int* ) ) {}

int main()
{
    f( 1, &fun );
    return 0;
}

?
It is always bad to give advices, but you will be never forgiven for a good one.
Oscar Wilde
Re[3]: Поиск подходящей функции
От: Bell Россия  
Дата: 21.02.06 10:19
Оценка: 2 (1)
Здравствуйте, 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 );
}
Re: Поиск подходящей функции
От: m_n Казахстан  
Дата: 21.02.06 09:59
Оценка:
Здравствуйте, Аноним, Вы писали:

А>Приведенный ниже код не компиляется. Объясните пожалуйста, почему не происходит правильного выбора подходящей функции (как например в случае отстутвия шаблонов). Спасибо.


А>
А>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: Поиск подходящей функции
От: shank  
Дата: 21.02.06 10:01
Оценка:
Здравствуйте, Аноним, Вы писали:

А>Приведенный ниже код не компиляется.


На каком компиляторе?
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>
E>void fun( int ) {}

E>void f( int, void( *func )( int ) ) {}

E>void f( int*, void( *func )( int* ) ) {}

E>int main()
E>{
E>    f( 1, &fun );
E>    return 0;
E>}
E>

E>?

а ведь действительно, можно и так. Спасибо.
Re[3]: Поиск подходящей функции
От: m_n Казахстан  
Дата: 21.02.06 10:10
Оценка:
Здравствуйте, Аноним, Вы писали:

А>Здравствуйте, m_n, Вы писали:


m_n>>У Вас аргумент шаблона указатель на функцию. Агрументом шаблона может быть (если не ошибаюсь): тип, константа интегрального типа типа int (даже кажется double запрещен), константная ссылка на статический объект. Вы же пытаетесь в качестве аргумента передедать указатель на функцию, а указатели передавать нельзя.


А>нет, дело не в этом. Указатель на функцию может быть параметром шаблона.


Ух ты, теперь буду знать.
Re: Поиск подходящей функции
От: Bell Россия  
Дата: 21.02.06 10:13
Оценка:
Здравствуйте, Аноним, Вы писали:

А>Приведенный ниже код не компиляется. Объясните пожалуйста, почему не происходит правильного выбора подходящей функции (как например в случае отстутвия шаблонов). Спасибо.


А>
А>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;
}
Любите книгу — источник знаний (с) М.Горький
Re[2]: Поиск подходящей функции
От: AlexDed  
Дата: 21.02.06 10:13
Оценка:
Здравствуйте, ekamaloff, Вы писали:

E>Здравствуйте, Аноним, Вы писали:


E>А так чем не угодило:


E>
E>void fun( int ) {}

E>void f( int, void( *func )( int ) ) {}

E>void f( int*, void( *func )( int* ) ) {}

E>int main()
E>{
E>    f( 1, &fun );
E>    return 0;
E>}
E>

E>?

но все равно интересно почему с шаблонами не компиляется.
Re: Поиск подходящей функции
От: m_n Казахстан  
Дата: 21.02.06 10:16
Оценка:
Здравствуйте, Аноним, Вы писали:

А>Приведенный ниже код не компиляется. Объясните пожалуйста, почему не происходит правильного выбора подходящей функции (как например в случае отстутвия шаблонов). Спасибо.


А>
А>void fun( int ) {}

А>template< void( *func )( int ) >
А>void f( int ) {}

А>template< void( *func )( int* ) >
А>void f( int* ) {}

А>int main()
А>{
А>    f<&fun>( 1 );
А>}
А>



Вот так компилируется:

void f (int)
{
}

typedef void (*f_t)(int);

template <f_t>
void m (int)
{
}

main()
{
    m <&f> (1);
}
Re[2]: Поиск подходящей функции
От: AlexDed  
Дата: 21.02.06 10:18
Оценка:
Здравствуйте, Bell, Вы писали:

B>Здравствуйте, Аноним, Вы писали:


B>Комо компилит этот пример без проблем, и выбипает правильную функцию.

B>VC 7.1 не компилит.

Спасибо понял, работать должно, но не работает
Re[2]: Поиск подходящей функции
От: Dmitry Kotlyarov Россия  
Дата: 21.02.06 10:35
Оценка:
Здравствуйте, Bell, Вы писали:

B>Комо компилит этот пример без проблем, и выбипает правильную функцию.


gcc 4.0.2. тоже компилит без проблем и выбирает правильную ф-цию.
Re[3]: Поиск подходящей функции
От: Bell Россия  
Дата: 21.02.06 10:38
Оценка:
Здравствуйте, Dmitry Kotlyarov, Вы писали:

DK>Здравствуйте, Bell, Вы писали:


B>>Комо компилит этот пример без проблем, и выбипает правильную функцию.


DK>gcc 4.0.2. тоже компилит без проблем и выбирает правильную ф-цию.

Чтож, остается только позавидовать счастливым обладателям Comeau и gcc 4.0.2...
Любите книгу — источник знаний (с) М.Горький
 
Подождите ...
Wait...
Пока на собственное сообщение не было ответов, его можно удалить.