Generic Class Alias Syntax
eris
jvburnes at gmail.com
Thu Jun 4 15:00:40 PDT 2009
Previously we were having fun with generic programming. When last we tuned in I had...
An enum:
enum ORDER {DESCENDING, ASCENDING};
An Interface:
public interface Ranker(T) {
bool submit(T value); // submits a value of type T to be included in top 'n' values, true if added or already present
bool expire(T value); // removes a previously included value of type T from top 'n' values, false if non-existant
T extreme(); // returns the value of type T from Ranker which is the current top value
}
And a Class Template:
class Rank(T, ORDER rankOrder = ORDER.ASCENDING) : Ranker!(T)
>From this and some implementation magic we can create objects that track the top (or bottom) 'n' elements submitted to it.
So far, so good.
I'm trying to create an alias that lets me create these objects like this:
auto top32 = MaxRank(int)(32);
Where '32' is the number of top elements to track.
So we create template aliases like this:
template MinRank(T) {
alias Rank!(T, ORDER.DESCENDING) MinRank;
}
template MaxRank(T) {
alias Rank!(T, ORDER.ASCENDING) MaxRank;
}
And that works, but only if I create the MaxRank by including an exclamation point thusly:
auto top32 = MaxRank!(int)(32);
Well, that kind of defeats one of the purposes of creating a template alias. With just a little more effort I can just type:
auto top32 = Rank!(int, ORDER.ASCENDING);
Is there any way to get around including the exclamation point?
Thanks,
eris
More information about the Digitalmars-d
mailing list