понедельник, 24 декабря 2012 г.

Указатель на функцию как параметр шаблона

Предположим, что нужно взять указатель на функцию-член класса и параметризовать ею шаблон. Для этого делаем следующее:

Для удобства обьявляем тип указателя на функцию:
typedef QDateTime ( QDateTime::*DateTimeIncrement ) ( int ) const;
Обьявляем шаблон (функцию или класс), принимающий указатель на функцию как параметр
template <DateTimeIncrement Increment>
QDateTime add( QDateTime dateTime, int delta )
{
return ( dateTime.*Increment )( delta );
}
А потом можно заюзать шаблон...
inline QDateTime addDays( QDateTime dateTime, int delta ) { return add< &QDateTime::addDays >( dateTime, delta ); }
...
QDateTime tomorrow = addDays( QDateTime::currentDateTime(), 1 );

Комментариев нет:

Отправить комментарий