Template specialization
Bill Baxter
dnewsgroup at billbaxter.com
Tue Apr 10 18:24:20 PDT 2007
Derek Parnell wrote:
> On Tue, 10 Apr 2007 19:51:36 +0900, Bill Baxter wrote:
>
>> Derek Parnell wrote:
>>> What is the point of specialization if the compiler can't tell the
>>> difference between data types? I expected that the point of using templates
>>> is to make generic programming simpler.
>> The way I've understood it is that specialization just doesn't work with
>> IFTI...
>> ... Use 'static if' checks
>> inside the template if you want to have both IFTI and specialization.
>
> Ok, I've tried all the reasonable ways to code this but the magic syntax to
> do it evades my attempts. This whole area of compile-time capabilities is
> very poorly documented.
>
> Anyway, below is the code I think should work, because it says exactly what
> I want the compiler to know. Namely, if the type (T) used in the code is
> and "int" then do the 'int'-stuff, etc ...
>
> template fill_data(T)
> {
> void fill_data(char[] raw_data, out T t)
> {
> static if (T == int) // LINE 42
> {
> t = makeInt( raw_data );
> }
> else
> static if (T == float)
> {
> t = toFloat( raw_data );
> }
> else
> {
> fscopy(t, raw_data);
> }
> }
> }
>
> but this gives me messages that do not make sense at all to me ...
>
> test2.d(42): found ')' when expecting '.' following 'int'
> test2.d(43): found '{' when expecting identifier following 'int.'
> test2.d(44): found 't' when expecting ')'
> test2.d(44): found '=' instead of statement
> test2.d(46): Declaration expected, not 'else'
> test2.d(51): Declaration expected, not 'else'
> test2.d(54): unrecognized declaration
>
> Can someone please show me the bleeding obvious correct syntax to use.
>
You need some is's there like
static if (is(T==int))
More information about the Digitalmars-d-learn
mailing list