- html - 出于某种原因,IE8 对我的 Sass 文件中继承的 html5 CSS 不友好?
- JMeter 在响应断言中使用 span 标签的问题
- html - 在 :hover and :active? 上具有不同效果的 CSS 动画
- html - 相对于居中的 html 内容固定的 CSS 重复背景?
我编写了一个具有 Variant
属性的组件,我想为其设置默认值。
TMyComponent = class(TComponent)
private
FVariantValue : Variant;
published
property VariantValue : Variant read FVariantValue write FVariantValue default False;
end;
编译时,我在 VariantValue
属性行上收到以下错误:
E2026 Constant expression expected
使用 Boolean
属性执行相同的操作不会导致任何类型的错误。
我读了一点documentation但我没有找到任何有关 Variant
属性默认值的信息。
最佳答案
这里要小心。 default
指令不会执行任何操作来设置属性本身的值。它仅影响该值是否显式保存在 .dfm
文件中。如果您为属性指定默认值,您仍然必须确保构造函数将支持字段初始化为该值。
Properties : Storage Specifiers
When saving a component's state, the storage specifiers of the component's published properties are checked. If a property's current value is different from its default value (or if there is no default value) and the stored specifier is True, then the property's value is saved. Otherwise, the property's value is not saved.
Note: Property values are not automatically initialized to the default value. That is, the default directive controls only when property values are saved to the form file, but not the initial value of the property on a newly created instance.
这只是对组件流系统的一个提示,它不需要将此值显式存储在 .dfm
中 - 您的契约(Contract)部分是确保您实际初始化支持字段到该值。执行此类初始化的适当位置是在组件的构造函数中:
constructor TMyComponent.Create(AOwner: TComponent);
begin
inherited Create(AOwner);
FVariantValue := False;
end;
也就是说,False
是一个 bool 值,而不是变体,因此它不能用作 Variant
类型的常量表达式。由于变体是一种复杂类型,因此不能将其表示为单个常量,因此不能具有 default
属性。
根据 Remy 的说法,如果您想确保当支持变体为 False
时变体不会保存在 .dfm
文件中,您可以使用 使用无参数方法存储的
指令,当变体计算结果为 bool 值False
时,该方法返回False
。例如:
property VariantValue : Variant read FVariantValue write FVariantValue stored IsVariantValueStored;
哪里
function TMyComponent.IsVariantValueStored : Boolean;
begin
Result := not VarIsType(FVariantValue, varBoolean);
if not Result then
Result := FVariantValue;
end;
关于delphi - Variant 属性可以有默认值吗?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/43394647/
我创建了一个简单的 Variant 类来存储字符串、整数、 double 等。我正在尝试使用 std::map 类型的映射但我收到了这个奇怪的错误: In file included from /us
我有一个整数数组来检索 std::variant 中的内容。但是编译失败,报错No matching function to call 'get' .您能否解释原因,并提出实现相同目的的可行解决方案?
我的问题涉及 boost::variant 转换与 C++ 中的 std::vector 的混合。在我的项目中,我使用变体作为 SQL 的输出。我将始终只使用一种类型的变体。我想要做的是从变量、变量
(警告:虽然它乍一看可能是一个问题,但这是 而不是 一个初学者级别的问题。如果您熟悉“让强制”这个短语或者您曾经查看过 VBA 规范,请继续阅读。) 假设我有一个 Variant 类型的表达式,我想将
我正在使用一个相当笨拙的 c 接口(interface)来存储集合。 LowLevelStorer 类表示我为此接口(interface)编写的包装器。 Storer 类是一个高级类,它与Data 有
我试图将两个变体组合成一个变体只是为了便于阅读。这是代码: using VariantType_basic = std::variant; using VariantType_vector = std
给定一个类型为 std::variant 的变量,我检查过它不包含C .如何将其转换为 std::variant ? std::variant convert(std::variant value)
使用boost:variant: #include #include #include template boost::variant _tuple_index(size_t i, const
在 answer 中对于这个 SO 问题: What is the equivalent of boost::variant in the C++ standard library? 提到boost:
自从在 Android Gradle 插件 0.13.0 中升级到 gradle 2.1 后,这个问题就出现了,但我一直无法理解为什么有时会记录此警告。 考虑此 block 以根据变体类型重命名 AP
我想为变量实现一个模板方法。 但是根据输入是否为 int 变量(char、short、int),我想处理它与输入为 float 变量(float、double、long double)的情况有所不同。
boost::variant通过 boost::variant<>::types 公开其变体类型列表, 可以方便地与 boost::mpl::for_each 一起使用. std::variant缺少
歌词: 我尝试通过 MPI 实现任务池。所以我需要某种 RPC,但它可以在我的程序的不同部分之间工作,这意味着处理器 A 希望处理器 B 以参数 D 调用函数 C。我们不能像处理线程那样在进程之间传递
目前我的库使用 boost::optional 和 boost::variant。由于 C++17 已经发布,我想添加一个选项,它可以与 boost 和 std 一起使用。 所以我成功地测试了带有 b
假设我有: class TypeA { }; class TypeB { }; typedef boost::variant Type; 没关系: void foo(Type t) { }; int
假设我有一个嵌套的 boost::variant -类型TNested包含一些类型和一些其他 boost::variant类型(它本身不能再次包含 boost::variant types ,因此不会
使用带有 gradle 插件版本 3.3.0-alpha11 的 Android Studio 3.3 Canary 11。尝试同步 gradle 时会抛出以下错误 WARNING: API 'var
我看过这篇关于使用 std::variant 的文章.这是因为以下代码引发了代码分析警告: void CChristianLifeMinistryHtmlView::OnTimer(UINT_PTR
我有一个 Delphi 6 类对象,其中包含 30 个变体的数组,每个变体都通过不同的索引属性公开。例如: property responseCode: integer Index 7
...或在内部快速更改类型 std::variant在源代码中。 下面是列表本身及其容器元素的头文件中的代码。 // HVector.hh class HVector: public std::vec
我是一名优秀的程序员,十分优秀!