【问题标题】:Delphi: Threads and GenericDelphi:线程和泛型
【发布时间】:2021-05-12 09:30:28
【问题描述】:

我只是想将泛型类型传递给 TThread 的执行方法。我想不通...

procedure MyThread.Execute;
begin
  Obj := TDWResponseType.FromJsonString<T>(Response);
end;

我应该使用 threadvar,如何转换它?

【问题讨论】:

  • 视情况而定。我们无法真正了解您正在尝试做的事情。
  • 你不能创建一个扩展TThread 的通用TMyThread&lt;T&gt; 类吗?

标签: multithreading delphi generics


【解决方案1】:

当您调用TDWResponseType.FromJsonString&lt;T&gt; 时,泛型类型T 必须明确定义或必须在外部上下文中作为T 可用。外部上下文中没有可用的T,这样的代码将无法编译。

在您的特定情况下,MyThread 类必须是泛型类或 Execute 方法必须是泛型方法。

假设MyThread类是TThread的后代,那么修改Execute方法是不可能的。

你有两个选择:

  • 声明MyThread&lt;T&gt; 而不是MyThread
  • 使用TDWResponseType.FromJsonString&lt;TSomeClass&gt;中的特定类

【讨论】:

    【解决方案2】:

    谢谢大家:

    procedure TMyThread<T>.Execute;  // with: TMyThread<T: class, constructor>=class(TThread)
    begin
      TJson.JsonToObject<T>(Response);
    end;
    

    【讨论】:

    • 这不是 Olivier 和 Dalija 的建议吗?
    • 是的,我感谢他们。我只是在回答我自己的问题...
    猜你喜欢
    • 2015-03-27
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多