Thread overview | |||||||
---|---|---|---|---|---|---|---|
|
September 04, 2007 template const to compile-time function | ||||
---|---|---|---|---|
| ||||
Currently I have this template:
template seqWrapper (char[] property, alias seq, alias array)
{
const seqWrapper = typeof(array).stringof ~ " " ~ property ~ "()"
"{"
"if (" ~ array.stringof ~ ".length == 0)"
" " ~ array.stringof ~ " = seqToArray (" ~ seq.stringof ~ ");"
"return " ~ array.stringof ~ ";"
"}";
}
Which is simply used like this:
mixin (seqWrapper!("users", _list, _users));
And it works. But I was wondering if it was better to have it as a compile-time function, and if so, how it could be changed. I'm using D1.0, btw.
--
Carlos Santander Bernal
|
September 04, 2007 Re: template const to compile-time function | ||||
---|---|---|---|---|
| ||||
Posted in reply to Carlos Santander | Carlos Santander wrote: > Currently I have this template: > > template seqWrapper (char[] property, alias seq, alias array) > { > const seqWrapper = typeof(array).stringof ~ " " ~ property ~ "()" > "{" > "if (" ~ array.stringof ~ ".length == 0)" > " " ~ array.stringof ~ " = seqToArray (" ~ seq.stringof ~ ");" > "return " ~ array.stringof ~ ";" > "}"; > } > > Which is simply used like this: > > mixin (seqWrapper!("users", _list, _users)); > > And it works. But I was wondering if it was better to have it as a compile-time function, and if so, how it could be changed. I'm using D1.0, btw. > string seqWrapper(string property, string seq, string array) { return `typeof(`~array~`) `~property~`() { if( (`~array~`).length == 0 ) `~array~` = seqToArray(`~seq~`); return `~array~`; }`; } mixin (seqWrapper("users","_list","_users")); Six of one, half-dozen of the other, really. Unless you need to do stuff involving loops or string processing, templates are quite sufficient. -- Daniel |
September 04, 2007 Re: template const to compile-time function | ||||
---|---|---|---|---|
| ||||
Posted in reply to Daniel Keep | Daniel Keep escribió: > > string seqWrapper(string property, string seq, string array) > { > return `typeof(`~array~`) `~property~`() > { > if( (`~array~`).length == 0 ) > `~array~` = seqToArray(`~seq~`); > return `~array~`; > }`; > } > > mixin (seqWrapper("users","_list","_users")); > I hadn't thought of that first line with typeof. Thanks. > Six of one, half-dozen of the other, really. Unless you need to do > stuff involving loops or string processing, templates are quite sufficient. > > -- Daniel I was thinking about code-generation bloat, but I guess I'd have to measure that myself. -- Carlos Santander Bernal |
September 05, 2007 Re: template const to compile-time function | ||||
---|---|---|---|---|
| ||||
Posted in reply to Carlos Santander | Carlos Santander wrote:
> I was thinking about code-generation bloat, but I guess I'd have to measure that myself.
If you only use the wrapper function in CTFE, try moving it to a separate module and not linking it, just importing. That way no unnecessary code is generated to the final executable or object files.
|
September 05, 2007 Re: template const to compile-time function | ||||
---|---|---|---|---|
| ||||
Posted in reply to Jari-Matti Mäkelä | Jari-Matti Mäkelä escribió: > Carlos Santander wrote: > >> I was thinking about code-generation bloat, but I guess I'd have to >> measure that myself. > > If you only use the wrapper function in CTFE, try moving it to a separate > module and not linking it, just importing. That way no unnecessary code is > generated to the final executable or object files. Nice tip. Thanks. -- Carlos Santander Bernal |
Copyright © 1999-2021 by the D Language Foundation