CTFE & template predicates

Rikki Cattermole via Digitalmars-d-learn digitalmars-d-learn at puremagic.com
Sun May 3 20:52:21 PDT 2015


On 4/05/2015 9:46 a.m., Robert M. Münch wrote:
> Hi, I have now played a around couple of hours (reading everything I
> could find) to get something to work, but I think I'm missing some basic
> concepts/understanding. Maybe someone can enlighten me how these things
> work. I thought that some code from David Nadlinger is what I'm
> searching for but don't know how to exactly make use of it.
>
> Here is the code: I want to filter out some of the "allMembers" and use
> them in my code for a switch/final to check that call cases that were
> not filtered are covered. Trying to build the enum for the switch/final
> statement.
>
> auto org_rules = TypeTuple!(__traits(allMembers,BolSource));
> static assert(!isTypeTuple!(org_rules));
>
> template startsNotWith(T,char C){
>     static if (T[0] != C){
>         enum startsNotWith = true;
>     } else {
>         enum startsNotWith = false;
>     }
> }
>
> template StaticFilter(alias pred, T...) {
>   static if (T.length == 0) {
>     alias TypeTuple!() StaticFilter;
>   } else static if (pred!(T[0])) {
>     alias TypeTuple!(T[0], StaticFilter!(pred, T[1 .. $])) StaticFilter;
>   } else {
>     alias StaticFilter!(pred, T[1 .. $]) StaticFilter;
>   }
> }
>
> alias startsNotWithp = startsNotWith!(T,"p"); // doesn't compile: Error:
> undefined identifier T
>
> alias rules = StaticFilter!(startsNotWithp, org_rules);
>
>
> While playing with this a couple of questions came up:
>
> 1. How do predicates get their argument(s)? I saw code where only the
> predicate was mentioned but no arguments. So, I assume there is some
> behind-the-curtain-magic going on. I read about things like "a == b"
> where I can reference 'a and 'b in a string.
>
> 2. "enum startsNotwith = false" So this is the return syntax for a CTFE
> for "return(true)" ?
>
> 3. TupleType is a very missleading name when you are learning these
> things, because the tuple can hold values as well. Or is there a more
> extensive explanation for the name I don't get?
>
> 4. Are there any tutorials about CTFE? This seems to be a very powerful
> but not so easy to use feature of D, but documentation is quite limited.
>
> Thanks a lot.

Have you looked at my book? https://leanpub.com/ctfe



More information about the Digitalmars-d-learn mailing list