The ABC's of Templates in D
Martin Tschierschke
mt at smartdolphin.de
Wed Aug 5 15:14:46 UTC 2020
On Friday, 31 July 2020 at 17:57:58 UTC, H. S. Teoh wrote:
I choosed the following way regarding:
> 2) The regex is not initialized by ctRegex in order to avoid the
> compile-time overhead; instead, it's initialized at program
> startup
> time.
version(DigitalMars){
auto reg(alias var)(){
return(regex(var));
pragma(msg,"regex used");
}
}
version(LDC){
// reg!() is an alias method, which can check which kind of
parameter it got
auto reg(alias var)(){
static if (__traits(compiles, {enum ctfeFmt = var;}) ){
// "Promotion" to compile time value
enum ctfeReg = var ;
pragma(msg, "ctRegex used");
return(ctRegex!ctfeReg);
}else{
return(regex(var));
pragma(msg,"regex used");
}
}
}
So when compiling with DMD my reg!("....") expression is using
the runtime version.
When compiling with LDC (for release) I use the ctRegex version,
if possible.
The (alias var) combined with the check if the var is known at
compile time:
__traits(compiles, {enum ctfeFmt = var;}
I have to admit that the idea was mine, but the crafting only
with the help of forum members!
// Function to mark all ocurences of the word offshore within
html bold.
string markoffshore(string to_mark){
return
to_mark.replaceAll(reg!(r"([oO]ffshore)"),"<b>$1</b>");
}
More information about the Digitalmars-d-announce
mailing list