Итак, я некоторое время изучал пример krabsetw
от Microsoft о том, как обрабатывать и анализировать события ETW. Их пример показал простое использование полей верхнего уровня. Но что происходит, когда задействованы массивы и сложные структуры?
Простое использование: множественные_провайдеры_001.cpp:
krabs::parser parser(schema);
auto url = parser.parse<std::string>(L"URL");
auto request_headers = parser.parse<std::string>(L"RequestHeaders");
auto response_headers = parser.parse<std::string>(L"ResponseHeaders");
std::cout << "\tURL: " << url << std::endl;
std::cout << "\t\tRequest Headers: " << request_headers << std::endl;
std::cout << "\t\tResponse Headers: " << response_headers << std::endl;
Замедление интерфейса:
template <typename T>
bool try_parse(const std::wstring &name, T &out);
/**
* <summary>
* Attempts to parse the given property by name and type. If the
* property does not exist, an exception is thrown.
* </summary>
*/
template <typename T>
T parse(const std::wstring &name);
template <typename Adapter>
auto view_of(const std::wstring &name, Adapter &adapter) -> collection_view<typename Adapter::const_iterator>;
Итак, подведем итог. В тех случаях, когда меня попросят предоставить следующее значение: A\B\C\Struct\Array
, такая операция даже вероятна с их API? или я должен преобразовать все в JSON и друзей и извлечь его оттуда?