- html - 出于某种原因,IE8 对我的 Sass 文件中继承的 html5 CSS 不友好?
- JMeter 在响应断言中使用 span 标签的问题
- html - 在 :hover and :active? 上具有不同效果的 CSS 动画
- html - 相对于居中的 html 内容固定的 CSS 重复背景?
在 Delphi 中,我有以下代码,并且一切正常:
var
StackOptions:TStack<String>;
s:string;
bfisio:boolean;
begin
StackOptions:=TStack<String>.Create;
//some pushs here
for s in StackOptions do begin
dosomething;
end;
end;
在 Lazarus 中我可以这样做:
uses
..., gstack;
type
TStringStack = specialize TStack<String>;
var
StackOptions: TStringStack;
s:string;
begin
//But this code doesn;t compile
StackOptions := TStringStack.Create;
//some pushs here
for s in StackOptions do begin // <-- Error
dosomething;
end;
end;
我在 Lazarus 中收到下一个错误:
Compile Project, Target: TicketLaz.exe: Exit code 1, Errors: 1
umain.pas(263,12) Error: Cannot find an enumerator for the type "TStack$1$crcAC3AF268"
如何循环堆栈并使用 Lazarus 搜索值而不从堆栈中删除项目?
最佳答案
FPC 的堆栈由 TVector 支持。
TVector 有一个枚举器。
您可以轻松添加类助手,如下所示:
快速而肮脏的代码。
type
TStringStack = specialize TStack<String>;
type
{ TStackHelper }
TVectorEnumerator = specialize TVector<string>.TVectorEnumerator;
TStackHelper = class helper for TStringStack
function GetEnumerator: TVectorEnumerator;
end;
{ TStackHelper }
function TStackHelper.GetEnumerator: TVectorEnumerator;
begin
Result:= FData.GetEnumerator;
end;
我真的不明白为什么堆栈不应该有迭代器。
即使在组装中,您也可以简单地执行 mov reg,[esp-04]
.
这种清教徒式的数据结构方法对任何人都没有帮助
由于 TStack 是通用的,所有这一切都变得复杂。
我知道 FPC 允许通用类助手,但我不确定如何使该解决方案适用于所有人 TStack<T>
另一种方法是简单地编辑 gstack.pas
暴露迭代器。
关于delphi - 将 TStack 代码从 Delphi 转换为 Lazarus,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/35901870/
我一直在与 TStack 合作,尝试在我的程序中实现一个简单的撤消/重做功能。这背后的想法是,当一个 Action 被执行时,程序的当前状态被保存——即被压入堆栈。当用户单击撤消时,程序的最后一个状态
我有一个TStack我需要循环所有项目来搜索值而不删除堆栈的项目。我有Pop和Extract方法,但它们从堆栈中删除项目。 如何循环堆栈中的所有项目并检查特定值而不删除它? procedure te
在 Delphi 中,我有以下代码,并且一切正常: var StackOptions:TStack; s:string; bfisio:boolean; begin StackOpti
我是一名优秀的程序员,十分优秀!