2014-08-20 3 views
0

Вот функция подписи:Как определить тип параметра targetType в функции IValueConverter «Преобразовать»?

Platform::Object^ ConverterImpl::Convert(Object^ value, TypeName targetType, Object^ parameter, String^ culture) 

Как проверить, что тип данных «TargetType» соответствует? В настоящее время я делаю так:

if(targetType.Name == "Windows.UI.Xaml.Media.Brush") 

Но должно быть лучшее решение.

ответ

3

Правильный синтаксис:

auto maybeBrush = dynamic_cast<Brush^>(parameter); 
if (maybeBrush != nullptr) 
{ 
    // We have a brush, let's do something with it! 
} 

Вы также могли бы сделать что-то вроде этого (принимая меры предосторожности против разыменования нулевого значения):

if (value->GetType() == Brush::typeid) 
{ 
    // We have a brush here, too! 
} 

Пример реализации можно найти в проекте Хило , или более удобно - this blog post.

+1

Да, ваш первый пример - правильный способ сделать это. Это довольно смущающе забыть dynamic_cast:/ И относительно второго: нет Мне не нужно проверять тип параметра «значение». «targetType» - это тип, к которому мы конвертируем. Это похоже на работу: if (targetType.Name == ТипName (Brush :: typeid) .Name) { } – seggaeman

Смежные вопросы