A module comprehensive template-specialization

Matthias Walter xammy at xammy.homelinux.net
Mon Jun 28 01:51:42 PDT 2010


On 06/28/2010 05:32 AM, Simen kjaeraas wrote:
> Matthias Walter <xammy at xammy.homelinux.net> wrote:
> 
>> Can I handle this in another way (like making the template a conditional
>> one)?
> 
> Template constraints[1] sounds like what you want.
> 
> Basically, you want the following:
> 
> == Module a ==
> | module a;
> |
> | template Base (T) if (!is(T t : t*))
> | {
> |   alias T Base;
> | }
> 
> == Module b ==
> | module b;
> |
> | import a;
> |
> | template Base(T) if (is(T t : t*))
> | {
> |   alias Base !(T) Base;
> | }
> 
> == Main module ==
> |
> |  import a, b;
> |
> | int main(char[][] args)
> | {
> |   alias Base !(int*) foo;
> |
> |   return 0;
> | }
> 
> Not tested, ymmv.
> 
> [1]: http://digitalmars.com/d/2.0/template.html#Constraint
> 

The problem with constraints arises when I want to make an existing
class (who's code I cannot modify) match a Concept, in which case I
would just add another template specialization for this class. Here I
would have to add further conditions to the template constraints, which
would also mean to modify a library. A prominent example for Boost Graph
Library is the LEDA graph class, which can be enabled to be used by BGL
by more or less just specializing the graph_traits template.

Any further ideas?


More information about the Digitalmars-d-learn mailing list