Как получить TypeName базового типа в C ++ / WinRT?

Я пытаюсь реализовать метод ICustomPropertyProvider::Type(), но не могу найти способ получить TypeName типа C ++ / WinRT. Видимо у вас Object::GetType и T::typeid в C ++ / CX, но не в C ++ / WinRT.

Я попробовал следующий код, но это была просто дикая догадка, так как это единственное, что я смог найти удаленно, связанное с типами. Однако я предполагаю, что typeid() не имеет ничего общего с XAML, поскольку единственная гарантия, которую он дает, заключается в том, что возвращаемая им строка является однозначно идентифицируемой.

using namespace Windows::Devices::Enumeration;
using namespace Windows::UI::Xaml::Interop;

TypeName name;
name.Name = typeid(DeviceInformation).name();
name.Kind = TypeKind::Metadata;

person jvdh    schedule 14.02.2018    source источник
comment
typeid() гарантированно будет уникальным; строка, которую он возвращает (через name()), может быть буквально чем угодно. Не надейтесь ни на что.   -  person Lightness Races in Orbit    schedule 15.02.2018


Ответы (1)


Шаблон функции winrt::xaml_typename<Type>() - это то, что вам нужно.

person Kenny Kerr    schedule 15.02.2018
comment
У меня был предыдущий SDK, поэтому я подумал, что должен быть способ обойтись без xaml_typename. Но, как указал Райан, есть некоторые странные оговорки. Я просто получу новый SDK и покончу с этим. - person jvdh; 15.02.2018
comment
Просто чтобы подтвердить, какой SDK это добавлен? Я сейчас нахожусь на 17095, но я не могу найти winrt :: xaml_typename. - person jvdh; 16.02.2018
comment
Вам необходимо включить заголовок winrt / Windows.UI.Xaml.Interop.h. - person Kenny Kerr; 16.02.2018