對不起,如果這是一個noob問題(但我是德爾福noob)。Delphi是否爲簡單的常見操作提供編譯器生成的代碼?
讓我們假設下面的代碼
InterfaceUnit.pas
unit InterfaceUnit;
interface
type
IMyInterface = interface(IInterface)
procedure DoStuff(withStuff : Stuff);
end;
TMyInterfaceHelperClass = class(TInterfacedObject, IMyInterface)
public
constructor Create();
destructor Destroy();
procedure DoStuff(withStuff : Stuff); virtual; abstract;
strict protected
{Have tons of standard ways how to process Stuff}
end;
implementation
{TMyInterfaceHelperClass}
constructor TMyInterfaceHelperClass.Create();
begin
inherited Create();
end;
destructor TMyInterfaceHelperClass.Destroy();
begin
inherited Destroy();
end;
{Have tons of standard ways how to process Stuff implemented here}
end.
ImplementationUnit.pas
unit ImplementationUnit;
interface
uses InterfaceUnit;
type
TMyInterfaceImplementationClass = class(TMyInterfaceHelperClass)
public
{*******************************************************************
* The Question is: ...
*******************************************************************}
constructor Create();
destructor Destroy(); override;
{*******************************************************************}
procedure DoStuff(withStuff : Stuff); override;
end;
implementation
{TMyInterfaceImplementationClass}
{*******************************************************************
* ... Why do I need to write that boilerplate code all the time?
*******************************************************************}
constructor TMyInterfaceImplementationClass.Create();
begin
inherited Create();
end;
destructor TMyInterfaceImplementationClass.Destroy();
begin
inherited Destroy();
end;
{*******************************************************************}
procedure TMyInterfaceImplementationClass.DoStuff(withStuff : Stuff);
begin
{Combine TMyInterfaceHelperClass to do extraordinary stuff with Stuff}
end;
end.
讓我們跳出代碼,並繼續與純文本。
因爲我來自C++的背景,我想知道爲什麼編譯器不能簡單地生成上面提到的樣板代碼段?
- 有沒有特別的原因我錯過了,爲什麼上面提到的代碼不能像編譯器那樣以任何體面的C++編譯器的方式生成?
- 至於目前的情況,我相信有RAD Studio(10)可用的宏套件和工具來克服這個問題? (你可以在評論中張貼建議,因爲這將是脫離主題在這裏要求這樣的工具)。
「*我不知道爲什麼編譯器不能簡單地生成上述樣板代碼片段*?」 - 的IDE有諸如[Class Completion](http://docwiki.embarcadero.com/RADStudio/en/Using_Class_Completion)和[Live Templates](http://docwiki.embarcadero.com/RADStudio/en/Using_Live_Templates)等功能來處理這些的東西。 –
@RemyLebeau謝謝你。使用IDE功能修復(解決方法)編譯器缺陷真的是一個好主意嗎?你怎麼看? – user0042
這不是編譯器缺陷。編譯器的責任不是編譯用戶代碼,而是編譯用戶代碼。 *生成用戶代碼是IDE的優點。所有主要的IDE都有與之相關的功能。你理解IDE和編譯器之間的區別,不是嗎? –