преобразование boost::bind -> boost::function
От: Amor Россия  
Дата: 12.05.11 08:07
Оценка:
Вопрос по boost, bind, function.

Есть такая функция, которая определяет единый способ вызова некоторого набора функций (в данном случае MFC::CRecordset).

     template< typename R >
     R CallMfc( boost::function<R ( void )> func )
     {
          try
          {
               return CheckResult( func );
          }
          catch( CDBException* pEx )
          {
               AFX_MANAGE_STATE(AfxGetStaticModuleState());
               Close();
               TCHAR errorBuffer[ 2048 ];
               pEx->GetErrorMessage( errorBuffer, 2048 );
               errorMessage_ = errorBuffer;
               throw XTOOStatus( e_DB_CONTROL );
          }
     }

     template< typename R >
     R CheckResult( boost::function<R ( void )> func )
     {
          return func();
     }


И есть например такой вызов:

     CallMfc<BOOL>( bind( &CRecordset::Open, recordset_, AFX_DB_USE_DEFAULT_TYPE, (LPCTSTR)0, CRecordset::none ) );


Он компилируется, но хотелось бы его сократить.

1. избавиться от <BOOL>, если не специализировать вызов, то выдается ошибка "could not deduce template argument "
Странно, почему так?
2. (не надеюсь особо, но вдруг) — избавиться от AFX_DB_USE_DEFAULT_TYPE, (LPCTSTR)0, CRecordset::none, чтоб вместо них подставлялись значения по умолчанию
BOOL Open(UINT nOpenType = AFX_DB_USE_DEFAULT_TYPE, LPCTSTR lpszSQL = NULL, DWORD dwOptions = none);
 
Подождите ...
Wait...
Пока на собственное сообщение не было ответов, его можно удалить.