digitalmars.D.learn - template const to compile-time function
- Carlos Santander (16/16) Sep 04 2007 Currently I have this template:
- Daniel Keep (14/34) Sep 04 2007 string seqWrapper(string property, string seq, string array)
- Carlos Santander (6/23) Sep 04 2007 I was thinking about code-generation bloat, but I guess I'd have to meas...
- Jari-Matti =?ISO-8859-1?Q?M=E4kel=E4?= (4/6) Sep 05 2007 If you only use the wrapper function in CTFE, try moving it to a separat...
- Carlos Santander (4/12) Sep 05 2007 Nice tip. Thanks.
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
Sep 04 2007
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
Sep 04 2007
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. -- DanielI was thinking about code-generation bloat, but I guess I'd have to measure that myself. -- Carlos Santander Bernal
Sep 04 2007
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.
Sep 05 2007
Jari-Matti Mäkelä escribió:Carlos Santander wrote:Nice tip. Thanks. -- Carlos Santander BernalI 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.
Sep 05 2007








Carlos Santander <csantander619 gmail.com>