Non è possibile scrivere le proprie funzioni intrinseche. Perché ciò richiede la magia del compilatore.
Tuttavia ci possono essere altre opzioni per raggiungere il tuo obiettivo.
preprocessore
L'unico modo è utilizzare un preprocessore.
Ci sono diverse: http://wiki.delphi-jedi.org/wiki/JEDI_Pre_Processor
Il preprocessore Delphi http://sourceforge.net/p/dpp32/wiki/Home/history
Andreas Hausladen ha appena open source il proprio lavoro in questo senso.
Non è realmente un preprocessore, ma un estensore della lingua.
https://github.com/ahausladen/DLangExtensions
Il problema con preprocessori è che uccide il collegamento tra la (prima del pre-processing) codice originale sorgente e il codice sorgente Delphi compila.
Ciò significa che non avrai informazioni di debug per la tua fonte originale.
(a meno che non si riscriva il file della mappa).
Inlining
A seconda di cosa si vuole fare è possibile utilizzare inline per raggiungere quasi la stessa efficienza come funzione intrinseca. Vedi: https://stackoverflow.com/a/6401833/650492
Costruisci le sue dichiarazioni con le funzioni intrinseche
Se si dispone di un blocco di codice che consiste di funzioni instrinsic, il risultato completo sarà valutata al momento della compilazione, rendendo il lavoro totale costrutto come se fosse un intrinseco funzione.
nota seguente (stupido) Esempio:
function FitsInRegister<T>: Boolean; inline;
begin
if GetTypeKind(T) in [tkString, tkUString] then result:= false
else
{$IFDEF CPU32BITS}
Result:= SizeOf(T) <= 4;
{$ELSEIF CPU64BITS}
Result:= SizeOf(T) <= 8;
{$ENDIF}
end;
Poiché è in linea e utilizza solo funzioni intrinseche (e direttive compilatore), la funzione sarà risolto in compiletime ad una costante e non genera alcun codice .
No. Avresti bisogno di un preprocessore. – TLama
forse la domanda dovrebbe essere come scrivere un preprocessore personalizzato –
@Jasper La domanda è abbastanza chiara. Sono supportati gli ins integrati esterni? –