Как получить тип TValue?

Мне нужно получить тип TValue.

TControl *control = MyForm->Controls[1337];
TRttiContext ctx;
TRttiType *type = ctx.GetType(control->ClassInfo());
TRttiProperty *property = type->GetProperty("Text"); // or "Caption", etc.
TValue result = property->GetValue(control);

if (result.IsType(tkUString)) {  
    std::cout << "String!" << std::endl;
else 
    std::cout << "NOT String!" << std::endl;

Я получаю следующую ошибку:

[bcc64 Error] Unit1.cpp(142): no matching member function for call to 'IsType'
System.Rtti.hpp(323): candidate function not viable: no known conversion from 'System::TTypeKind' to 'System::Typinfo::PTypeInfo' (aka 'System::Typinfo::TTypeInfo *') for 1st argument

Глядя на документацию, IsType() принимает PTypeInfo аргумент ( который tkUString не является).

Но документации по C++ по PTypeInfo нет, есть только Delphi.

Должен ли я включать модуль Delphi в свой проект, чтобы использовать TValue.IsType()?


person GirkovArpa    schedule 13.05.2020    source источник


Ответы (1)


Я использовал неправильный метод.

Это не правильно:

if (result.IsType(tkUString)) {  

Это правильно:

if (result.Kind == tkUString) {
person GirkovArpa    schedule 13.05.2020