Как объявить вложенные шаблоны в idl 3.0 - PullRequest
0 голосов
/ 28 ноября 2018

У меня есть, как я надеюсь, основной вопрос, но мне не удалось найти какую-либо документацию или примеры по MSDN или Интернету в целом.

Я реализую компонент среды выполнения Windows в C ++ / WinRT,У меня есть асинхронный метод, который сканирует на наличие определенного типа устройства и возвращает вектор строк (идентификаторы устройств) найденных устройств.С ++ подпись функции:

static IAsyncOperation<IVector<winrt::hstring>> ScanInterfacesAsync();

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

static IAsyncOperation<IVector<String>> ScanInterfacesAsync();

Сбой с ошибкой:

error MIDL2025: [msg]syntax error [context]: expecting > or , near ">>"

Я пробовал несколько других вещей, но могу сказать, что просто принципиально не понимаю, как работает IDLшаблоны.И я не могу найти примеры шаблонного типа возврата ни в одной онлайн документации IDL.

Возможно ли это?Какой правильный синтаксис?Какие-нибудь указатели на документацию я пропустил?Спасибо.

1 Ответ

0 голосов
/ 29 ноября 2018

В сообщении об ошибке указывается, что MIDL 3.0 использует жадный анализатор.Он интерпретирует две последовательные закрывающие угловые скобки (>) как один оператор смещения вправо (>>), так же, как это делал C ++ до C ++ 11 (см. правая угловая скобка ).

Чтобы обойти это, источник MIDL 3.0 должен ввести произвольный пробел (например, один пробел) между последовательными закрывающими угловыми скобками, чтобы он интерпретировался как два разных токена, а не как один токен.Следующее должно скомпилировать:

static IAsyncOperation<IVector<String> > ScanInterfacesAsync();
...