www.digitalmars.com         C & C++   DMDScript  

digitalmars.D.learn - assert format of a string before a mixin

reply ddcovery <antoniocabreraperez gmail.com> writes:
I have a "variation" of "unaryFun" that I name "unaryProp" that, 
basically, doesn't require to specify "a." at the beginning of 
the expression.

 template unaryProp(alias propName)
 {
   static assert(is(typeof(propName) : string), "Sorry, propName 
 must be an string");
   auto unaryProp(ElementType)(auto ref ElementType a)
   {
     return mixin("a." ~ propName);
   }
 }

 assert( "hello".unaryProp!"length" == 5 );
Problem is I need to check that "propName" is a valid property name at compile time
 i.e. checking this Regex expression
 `^[a-zA-Z_]*[a-zA-Z0-9_]*[a-zA-Z][a-zA-Z0-9_]*$`
Is there any way to check a regular expression at compile time?
Sep 27 2020
parent reply Adam D. Ruppe <destructionator gmail.com> writes:
On Sunday, 27 September 2020 at 21:38:43 UTC, ddcovery wrote:
 i.e. checking this Regex expression
 `^[a-zA-Z_]*[a-zA-Z0-9_]*[a-zA-Z][a-zA-Z0-9_]*$`
Is there any way to check a regular expression at compile time?
Not really and I'd actually suggest not trying because even if it did work, it'd probably be very slow. But that regex there is pretty easy to translate to a little hand-written loop function that would do the job runtime, ctfe both and do it quickly.
Sep 27 2020
parent ddcovery <antoniocabreraperez gmail.com> writes:
On Sunday, 27 September 2020 at 21:41:25 UTC, Adam D. Ruppe wrote:
 On Sunday, 27 September 2020 at 21:38:43 UTC, ddcovery wrote:
 i.e. checking this Regex expression
 `^[a-zA-Z_]*[a-zA-Z0-9_]*[a-zA-Z][a-zA-Z0-9_]*$`
Is there any way to check a regular expression at compile time?
Not really and I'd actually suggest not trying because even if it did work, it'd probably be very slow. But that regex there is pretty easy to translate to a little hand-written loop function that would do the job runtime, ctfe both and do it quickly.
Thanks Adam.
Sep 27 2020