L
littlefat
Unregistered / Unconfirmed
GUEST, unregistred user!
有两种记录类型:
TPoint=record
Counter:Integer;
Value:Byte;
end;
TPeak=record
Counter:Integer;
Value:Byte;
Width:Integer;
end;
这两种记录类型的数据,都需要一个环行缓冲管理器来管理,该环行缓冲区管理器要实现的一些功能完全相同。为了减少代码重复(提高代码复用率并减少差错),应该只设计一个通用的环行缓冲区管理类,可是我不知道应该怎样来设计这个类,所以现在万不得已,只能编下面的重复代码,希望高手指点我怎样才能写出这个通用类:
TRingBufferA=class(TObject)
private
FBuffer:Array [0..1024] of TPoint;
...
public
property Current:TPoint read GetCurrent;
property Last:TPoint read GetLast;
property Item[ItemIndex:Integer]:TPoint read GetItem;default;
function Add(APoint:TPoint):Integer;
end;
TRingBufferB=class(TObject)
private
FBuffer:Array [0..1024] of TPeak;
...
public
property Current:TPeak read GetCurrent;
property Last:TPeak read GetLast;
property Item[ItemIndex:Integer]:TPeak read GetItem;default;
function Add(APeak:TPeak):Integer;
end;
附带还有另外一个问题也让我比较难受,下面的语句编译不通过:
RingBufferA[3].Value:=50;
编译器报告说左边不能被赋值,现在我变通的办法是,将类中的代码:
property Item[ItemIndex:Integer]:TPeak read GetItem;default;
改成:
property Item[ItemIndex:Integer]:TPeak read GetItem write SetItem;default
...
TRingBufferA.SetItem(ItemIndex: Integer
const APoint: TPoint);
begin
Buffer[ItemIndex].Counter:=APoint.Counter;
Buffer[ItemIndex].Value:=APoint.Value;
end;
真的就不能直接赋值吗?
谢谢!
TPoint=record
Counter:Integer;
Value:Byte;
end;
TPeak=record
Counter:Integer;
Value:Byte;
Width:Integer;
end;
这两种记录类型的数据,都需要一个环行缓冲管理器来管理,该环行缓冲区管理器要实现的一些功能完全相同。为了减少代码重复(提高代码复用率并减少差错),应该只设计一个通用的环行缓冲区管理类,可是我不知道应该怎样来设计这个类,所以现在万不得已,只能编下面的重复代码,希望高手指点我怎样才能写出这个通用类:
TRingBufferA=class(TObject)
private
FBuffer:Array [0..1024] of TPoint;
...
public
property Current:TPoint read GetCurrent;
property Last:TPoint read GetLast;
property Item[ItemIndex:Integer]:TPoint read GetItem;default;
function Add(APoint:TPoint):Integer;
end;
TRingBufferB=class(TObject)
private
FBuffer:Array [0..1024] of TPeak;
...
public
property Current:TPeak read GetCurrent;
property Last:TPeak read GetLast;
property Item[ItemIndex:Integer]:TPeak read GetItem;default;
function Add(APeak:TPeak):Integer;
end;
附带还有另外一个问题也让我比较难受,下面的语句编译不通过:
RingBufferA[3].Value:=50;
编译器报告说左边不能被赋值,现在我变通的办法是,将类中的代码:
property Item[ItemIndex:Integer]:TPeak read GetItem;default;
改成:
property Item[ItemIndex:Integer]:TPeak read GetItem write SetItem;default
...
TRingBufferA.SetItem(ItemIndex: Integer
const APoint: TPoint);
begin
Buffer[ItemIndex].Counter:=APoint.Counter;
Buffer[ItemIndex].Value:=APoint.Value;
end;
真的就不能直接赋值吗?
谢谢!