如何获取 TValue 的类型?
How to get type of 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
查看 documentation IsType()
需要一个 PTypeInfo
参数(tkUString
不是)。
但是 PTypeInfo
上没有 C++ 文档,只有 Delphi.
我必须在我的项目中包含一个 Delphi 单元才能使用 TValue.IsType()
吗?
我用错了方法。
这是错误的:
if (result.IsType(tkUString)) {
这是正确的:
if (result.Kind == tkUString) {
我需要获取 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
查看 documentation IsType()
需要一个 PTypeInfo
参数(tkUString
不是)。
但是 PTypeInfo
上没有 C++ 文档,只有 Delphi.
我必须在我的项目中包含一个 Delphi 单元才能使用 TValue.IsType()
吗?
我用错了方法。
这是错误的:
if (result.IsType(tkUString)) {
这是正确的:
if (result.Kind == tkUString) {