On 2015-05-03 23:28:00 +0000, anonymous said:
Here T would have to be a type. But you want to accept a string. So:
----
template startsNotWith(string s,char c){
enum startsNotWith = s.length == 0 || s[0] != c;
}
----
Hi, ok, just to better understand this (I have a C++ background (even
quite old)): When I want to use some functions I need to specify the
type? It's not possible to use T.length() which would compile if T is a
string? I thought that it's just generic and I can throw in T.
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.
Predicates are called/instantiated by the thing to which you pass them.
StaticFilter instantiates pred for each element of the T tuple it's
given. If some documentation doesn't say how the predicate will be
called/instantiated, then it's probably assumed to be obvious.
Well, and often it's obvious that it's not obvious ;-)
String predicates are turned into functions behind the curtains. The
thing you instantiate with "a == b" turns it into `(a, b) {return a ==
b;}` and uses that. I think we don't do string predicates for templates
like StaticFilter, though.
Ok, that helps to better understand how this works.
Thanks for the feedback.
--
Robert M. Münch
http://www.saphirion.com
smarter | better | faster