我有一组使用子范围类型作为输入参数的函数。
const
ImprovementNodeCount = 20;
SaleAllocationNodeCount = 10;
type
TImprovementNodePrintOrders = 0..ImprovementNodeCount;
TSaleAllocationNodePrintOrders = 0..SaleAllocationNodeCount;
function SaleImprovementType(PrintOrder: TImprovementNodePrintOrders): TSaleReferenceRecord;
function SaleAllocationType(PrintOrder: TSaleAllocationNodePrintOrders): TSaleReferenceRecord;
function SaleAllocationAcres(PrintOrder: TSaleAllocationNodePrintOrders): TSaleReferenceRecord;
// many more functions with different SubTypes
这对我来说效果很好。我有一种新情况,可以方便地将其中一个函数作为参数传递。我的子范围现在引起了问题,因为它们是不同的类型。
除了子类型之外,所有功能看起来都相同。我试图添加一个像这样的新函数类型
TGetReferenceFunction = function (Index: cardinal): TSaleReferenceRecord;
现在编译器抱怨当我尝试将函数参数作为 TGetReferenceFunction 传递时类型不同。有什么方法可以创建一个函数类型,其中包含所有这些具有不同子类型参数的函数?
[DCC 错误] SaleNameMap.pas(295):E2010 不兼容的类型:“Cardinal”和“TImprovementNodePrintOrders”
我真正需要的是一种全是数字子类型的类型。我知道我可以为我拥有的每个子类型创建不同的函数类型,但这仍然不允许我将这些函数作为参数传递给一个通用函数。
我猜这是不可能的。如果是这样,我还有其他选择,但如果我遗漏了什么,我想我会先在这里尝试。