Sorry.由于匆忙,前面的InDone方法的声明更改为如下:
function IsDone: Boolean;
function IsDone: Boolean;
解决方案 »
- 请教如何列举所有窗口
- delphi有实现这种效果的控件么?
- 简单的触发器问题。
- 诚征深圳delphi专职开发人员!
- 在delphi7中的dbgrid控件中怎样显示一个checkbox样式的字段?????
- 专家分过1000,可用分上万,又多了一个三角,开心,送分!
- 谁有installshield express for delphi6.0的?或者告诉我哪下载?
- 请问dbgrid控件中的下拉条弹出产生什么事件?
- 请问各位大虾,我加载的.gif格式的动画图片怎么样才能让他随着窗体的变化而变化呢,在此谢谢大家了。
- 如果别人回答我的问题,我如何给分
- 我想从VB转到Delphi,有经验的大哥给个建议!
- 今天是我爱过女孩的生日……
Variant是一个变体,可以保存任何值。但是我需要的是能够在子类中
返回所需要类型的对象。Variant和对象之间是不能直接转换的啊。
我突然有一个想法,是否把CurrentItem作为属性
然后在子类中重新定义这个属性的类型。如:
TwhhIteratorBase = class
public
//返回当前元素.由于这时基类,返回TObject类型。
property CurrentItem: TObject;
end; TwhhDocListIterator = class
public
//可以在子类重新定义这个属性的类型
property CurrentItem: TDoc read GetCurrentItem;
end;
这样的话,不管那个层次的迭代器,都这个属性CurrentItem。但在子类中
这个属性的类型可以不同。
TTraverser = class
protected
function ProcessItem(AobjItem: TObject): Boolean;
function CreateIterator: TwhhIterator;
public
function Traverser: Boolean;
end;下面是实现代码:
function TTraverser.CreateIterator: TwhhIterator;
begin
Result := TwhhIterator.Create;
end;function TTraverser.ProcessItem(AobjItem: TObject): Boolean;
begin
Result := True;
end;function TTraverser.Traverser: Boolean;
var
objIterator: TifoIterator;
begin
Result := False;
objIterator := CreateIterator;
//通过Iterator遍历,然后对所有Item进行ProcessItem操作。
objIterator.First;
while not objIterator.IsDone do begin
if not ProcessItem(objItem.CurrentItem) then begin
Exit;
end;
objIterator.Next;
end;
Result := True;
end;
这个Traverser类就是通过迭代器的遍历,对Item进行ProcessItem操作。完成对所有Item的操作。而且这个类很容易进行子类化,从而实现对Item进行不同操作的目的,重用性高。但在Traverser类不一定需要Iterator类具体是如何实现,就可以完成了。而且是什么Iterator子类实例化,可以在子类对CreateIterator覆盖后期达到。
在这个例子里,要为每个子类写GetCurrentItem的代码,当然.
要是想同使用C++模板那么简单是不可能的.