Q: Help with compile time function
Jari-Matti Mäkelä
jmjmak at utu.fi.invalid
Sat Jun 23 23:15:43 PDT 2007
Myron Alexander wrote:
> Hello.
>
> I want to check that a structure contains only the supported types for a
> fetch from the database. I want to check this at compile time and issue
> an assert. I have come up with the following:
>
>> /**
>> * Compile time check that structure field types match supported types
>> for * structure fetch.
>> *
>> * Supported types :-
>> * int (int32), long (int64), char[] (utf-8), void[] (blob), float,
>> double. *
>> * Unsupported types :-
>> * wchar[] (utf-16)
>> * void* (null)
>> *
>> * It does not make sense to support null as a value return type so it
>> will * never be supported. The utf16 type is not supported at this time
>> as I do * not know how to support it. Only partial support for utf16 in
>> the system. */
>> static void chkStrucOkForFetch(T) () {
>> foreach (i, f; FieldTypeTuple!(T)) {
>> static assert (
>> is (typeof(f) == int) || // int32
>> is (typeof(f) == long) || // int64
>> is (typeof(f) == char[]) || // utf-8
>> is (typeof(f) == void[]) || // blob
>> is (typeof(f) == float) ||
>> is (typeof(f) == double)
>> , "Invalid field type for structure fetch. Field ("~str(i)~
>> ") not one of int, long, char[], void[], float, double."
>> );
>> }
>> }
>
> This code performs the check but I cannot get it to print the name of
> the structure and the field.
>
> Please can you help me with the following:
>
> - How can I get the name of the structure (T) and field type at
> compile time?
You mean T.stringof and f.stringof ?
> - If I call this from a normal run-time function, will it get
> executed at run-time as well as in compile-time?
I'm afraid that function above doesn't do anything on runtime. You need to
use the RTTI system to get the type at runtime.
>
> Thanks and best regards,
>
> Myron.
--
More information about the Digitalmars-d-learn
mailing list