gpt4 book ai didi

delphi - 将 "Enhanced Record"分配给正常的 "Data Type"变量时,我应该重载什么运算符?

转载 作者:行者123 更新时间:2023-12-03 15:26:04 25 4
gpt4 key购买 nike

首先,我需要知道我想做的事情是否可行。如果可能的话,我需要知道如何做。

演示问题比解释问题要容易得多,所以这里是:

我有一个“增强记录”(目的 - 虽然对这个问题并不重要 - 是生成一个“智能字符串”类型,以替换普通的字符串类型):

TLKString = record
Value: String;
// Some methods here to operate on and build String values

// Allows me to assign String values directly to "instances"
// of this record type! I have others (hence "overload") to
// handle other data types (such as Integer etc.)
class operator Implicit(const AValue: String): TLKString; overload;
end;

我现在可以按如下方式使用此 TLKString 类型:

var
LSmartString: TLKString;
begin
LSmartString := 'Hello World'; // The "Implicit" operator then
// assigns this to LSmartString.Value
end;

好的,到目前为止一切都很好!现在我们解决问题了......

我需要能够将 LSmartString(TLKString 的“实例”)的值分配给普通的 String 变量...

var
LSmartString: TLKString;
LNormalString: String;
begin
LSmartString := 'Hello World';

// The next line works fine, but is not what I want!
LNormalString := LSmartString.Value;
LNormalString := LSmartString; // E2010 (Incompatible Types)
end;

这就是我遇到困难的地方,因为(我相信您会注意到),上述片段的最后一行导致 E2010 不兼容类型:'string' 和 'TLKString'。当然,我知道情况会是这样...我不知道是否可以通过在 TLKString 记录类型上重载运算符来克服,如果可以,我需要重载哪个运算符来完成它。

如果这是不可能的,那么让我觉得 CodeGear 和 Embarcadero 使用 ImplicitExplicit 运算符来处理对增强型的值赋值有点愚蠢。记录类型,但没有运算符来处理逆操作。

最佳答案

好吧,我自己已经回答了这个问题......这就是我所说的“显而易见”。

这是解决方案(为了他人的利益)

TLKString = record
Value: String;
// Some methods here to operate on and build String values
class operator Implicit(const AValue: String): TLKString; overload; // handles String to TLKString assignment
class operator Implicit(const AValue: TLKString): String; overload; // handles TLKString to String assignment! THIS IS THE ANSWER!
end;

关于delphi - 将 "Enhanced Record"分配给正常的 "Data Type"变量时,我应该重载什么运算符?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/8439877/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com