相关疑难解决方法(0)

在delphi中测试泛型的类型

我想用一些方法在delphi中编写一个函数,如下所示

procedure Foo<T>;
begin
    if T = String then
    begin
        //Do something
    end;

    if T = Double then
    begin
        //Do something else
    end;
end;
Run Code Online (Sandbox Code Playgroud)

即:我希望能够根据泛型类型做不同的事情

我尝试过使用TypeInfo,System但这似乎适合于对象而不是泛型类型.

我甚至不确定帕斯卡是否可行

delphi generics pascal delphi-xe6

9
推荐指数
2
解决办法
1930
查看次数

如何在不使用 Delphi 中的约束的情况下判断泛型类型是否为零?

我想在不使用约束的情况下检查泛型类型是否“有效”。

换句话说,我想编写以下代码:

class function TMaybe<T>.FromValue(aValue: T): TMaybe<T>;
begin
  if T <> nil then
  begin
    Result := TMaybe<T>.Some(aValue);
  end else
  begin
    Result := TMaybe<T>.None;
  end;
end;
Run Code Online (Sandbox Code Playgroud)

但是,这不会编译错误:

E2571 Type parameter 'T' doesn't have class or interface constraint
Run Code Online (Sandbox Code Playgroud)

显然,对于这样的类,我希望能够将任何类型设为 TMaybe。

有没有办法检查无约束类型是否“有效”,即不为空?(我不在乎空字符串等)

我应该写一个TypeIsEmpty<T>(aValue: T): Boolean使用 TypInfo 来弄清楚的吗?我想避免这种情况。

delphi

4
推荐指数
1
解决办法
272
查看次数

标签 统计

delphi ×2

delphi-xe6 ×1

generics ×1

pascal ×1