Fra*_*den 5 arrays delphi enums
我需要编写一个可以传递不同枚举选择的过程.
type
TEnumOne = (eOneFlagOne, eOneFlagTwo);
TEnumTwo = (eTwoFlagOne, eTwoFlagTwo);
Run Code Online (Sandbox Code Playgroud)
该方法应采用不同的枚举:
Process([eOneFlagOne, eTwoFlagTwo]);
Run Code Online (Sandbox Code Playgroud)
我试图像这样实现它:
// does not work!
procedure Process(const Enums: array of Variant);
var aValue; Variant
begin
for aValue in Enums do
begin
// of course, can't work...
if aValue is TEnumOne then
end;
end;
Run Code Online (Sandbox Code Playgroud)
那么,有没有一种类型而不是Variant,我可以选择吗?或者是一种不同的方法,我不明白吗?
Wou*_*ick 10
满足帕斯卡的美丽.
以下是您可能尝试执行的操作示例:
program Project34; {$APPTYPE CONSOLE}
type
TEnum=(eOneFlagOne,eOneFlagTwo,eTwoFlagOne,eTwoFlagTwo);
TEnumSet=set of TEnum;
const
cEnumOne=[eOneFlagOne,eOneFlagTwo];
cEnumTwo=[eTwoFlagOne,eTwoFlagTwo];
procedure Process(const Enums: TEnumSEt);
var e:TEnum;
begin
for e in Enums do
WriteLn(ord(e));
end;
begin
Process([eOneFlagOne, eTwoFlagTwo]);
Process(cEnumOne);
Process(cEnumTwo);
end.
Run Code Online (Sandbox Code Playgroud)
请注意,您也可以声明这样的常量.也许这更清楚:
const
cEnumOne:TEnumSet=[eOneFlagOne,eOneFlagTwo];
cEnumTwo:TEnumSet=[eTwoFlagOne,eTwoFlagTwo];
Run Code Online (Sandbox Code Playgroud)
坦率地说,当你开始尝试这样改变你的语言时,通常意味着你的方法可能是错误的。(并不总是,但通常)我很想听听您想要解决什么问题,因为也许有更好的设计选择。
由于我们对您的问题知之甚少,我建议您创建两个具有不同签名的函数。
或者,
如果所需的逻辑分支彼此足够相似,那么您可以使用枚举类型作为通用参数来创建通用方法(假设是 Delphi 2009 或更高版本)。
...
procedure Process<T>(const enumParam : T) // Add a generic constraint here as well
begin
...
end;
Run Code Online (Sandbox Code Playgroud)
然而,在我看来,两种不同的方法可能是最好的选择(或者完全是其他的方法)
归档时间: |
|
查看次数: |
1813 次 |
最近记录: |