"grauzone" <[email protected]> wrote in message news:[email protected]... > Daniel Keep wrote: >> >> Templates are a different matter, but then C++ has the same problem. >> Whether or not you want to release your templates as part of the SDK >> really depends on what they are. Templates + interfaces make a good >> pair. > > Sure. Bytecode based languages like C# still can export compiled generics, > though. Of course, they are not as flexible as D or C++ templates. >
AIUI, C#'s ability to export compiled generics forced the generics to be designed in such a way that objects of the generic type 'T' can only be used in ways explicitly allowed by T's explicit constraints. For instance, performing a comparison on an object of type T is a compile-time error unless the programmer places a constraint on T that T must be something that implements the IComparable interface (which includes all of the primitives). As far as I can tell, the only limitation this inherently forces on generics is that the language/library must provide a constraint for anything that a template is able to do. The main part where this *really* gimps C#'s generics is just simply MS's constant refusal to provide either an IArithmetic counterpart to IComparable or individual operator constraints. In other words, I'm not certain that the lack of flexibility in C#'s generics is an inherent consequence of its compiled generics being exportable.
