Re: templated QueryInterface
От: rg45 СССР  
Дата: 11.02.20 11:30
Оценка: 2 (1)
Здравствуйте, The Passenger, Вы писали:

TP>Понадобилось тут создать базовый для IUnknown ... тянуть ATL было лень

TP>стал смотреть в сторону статической типизации на шаблонах, нашел такое —
TP>https://www.codeproject.com/Tips/1057327/Variadic-Template-Technique-and-COM-Unusual-Soluti

TP>Можно ли сделать с 14 или 17 плусами это поэлегантнее — без разбивки на 2 функции для вариадик и невариадик?


Как по мне, то и так достаточно элегантно — одна функция обепечивает рекурсивный перебор, другая представляет собой обработчик одной итерации. Можно обе задачи поместить в один скоуп, но все равно вторую функцию прийдется оставить как тривиальное замыкание рекурсии:

      template<typename Interface, typename... Args>         
      bool castInterfaces(             
           REFIID aRefIID,             
           _COM_Outptr_ void __RPC_FAR *__RPC_FAR *aPtrPtrVoidObject,             
           Interface* aThis,             
           Args... aRest)         
      {             

         if (aThis && aRefIID == __uuidof(Interface))
         {                 
             *aPtrPtrVoidObject = aThis;
             return true; 
         }
         return castInterfaces(aRefIID, aPtrPtrVoidObject, aRest...);             
     }
        
     bool castInterfaces(             
          REFIID aRefIID,             
          _COM_Outptr_ void __RPC_FAR *__RPC_FAR *aPtrPtrVoidObject)         
    {             
        return false;
    }
};
--
Не можешь достичь желаемого — пожелай достигнутого.
Отредактировано 11.02.2020 11:37 rg45 . Предыдущая версия . Еще …
Отредактировано 11.02.2020 11:33 rg45 . Предыдущая версия .
Отредактировано 11.02.2020 11:32 rg45 . Предыдущая версия .
 
Подождите ...
Wait...
Пока на собственное сообщение не было ответов, его можно удалить.