Здравствуйте, Аноним, Вы писали:
А>Здравствуйте,
А>Захотелось написать примерно такой код:
А>А>test_struct
А>{
А>template< T1 >
А> test( IComInterface * obj, HRESULT ( __stdcall IComInterface ::*method )( T1 ) )
А> {
//Функция ждет один аргумент, в вызове нет ни одного
А> std::cout <<
"method returned " << GetResultString( ( obj -> *method ) () );
А> }
А>
template< T1, T2 >
А> test( IComInterface * obj, HRESULT (
__stdcall IComInterface ::*method )( T1, T2 ) )
А> {
А> T1 temp1();
//Старые грабли - объявление функции temp1 без аргументов с типом возвращаемого значения T
А> T2 temp2();
//Аналогично
А> std::cout <<
"method returned " << GetResultString( ( obj -> *method ) ( temp1, temp2 ) );
А> }
А>}
//Ну и зачем понадобилась test_struct?
А>
template<
class T1 >
А>
void TestMethod( IComInterface * obj, HRESULT (
__stdcall IComInterface ::*method )( T1 ) )
А>{
А> test_struct().test( obj, method );
А>}
А>
template<
class T1,
class T2 >
А>
void TestMethod( IComInterface * obj, HRESULT (
__stdcall IComInterface ::*method )( T1, T2 ) )
А>{
А> test_struct().test( obj, method );
А>}
А>
А>Объясните, это я в отпуск хочу, или у него какие-то проблемы?
Смотри коментарии в коде