내가하려는 일이 가능하다면 무엇보다 먼저 알아야합니다. 가능하다면 어떻게해야하는지 알 필요가 있습니다."강화 된 레코드"를 일반 "데이터 유형"변수에 할당 할 때 어떤 연산자를 오버로드합니까?
그것은 문제를 보여보다는 그래서 여기에 그것을 설명하기 위해 훨씬 쉽게 간다 :
나는이에 "향상된 기록"(목적 -이 질문에 중요하지는하지만 - "스마트 문자열"유형을 생산하는 것입니다) 일반 문자열 유형을 대체하는 다음과 같이
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;
좋아, 지금까지 모든 중대하다
! 이제 우리는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;
이것은 어디 ...
나는 일반 문자열 변수 (TLKString의 "예") LSmartString의 값을 할당 할 수 있어야합니다 ... 문제에 도착 위의 snip 결과의 마지막 줄은 E2010 호환되지 않는 유형 인 '문자열'과 'TLKString'입니다. 물론 TLKString 레코드 유형에서 연산자를 오버로드하여 극복하는 것이 가능한지 잘 모르는 경우, 그렇다면 어떤 연산자로 오버라이드해야합니까?이 가능하지 않다면, 그것은 향상된 기록 유형 값의 할당을 처리하는 Implicit
및 Explicit
연산자를 가지고 코드 기어와 엠바 카데 조금 바보 같은 날에 충돌 있지만 조작자가 반전 처리 없음.
자신의 대답을 받아주십시오입니다. 1. 그것은 좋은 것입니다. 2. 그것은 더 이상 하나가 필요로 보이지 않을 것입니다 :) –
그것은 다른 날에 응답하도록 표시하지 않을 것입니다! 일부 스택 오버플로 제한 사항 – LaKraven