nested enum like template generator
Ali Çehreli
acehreli at yahoo.com
Tue Jul 16 14:01:30 PDT 2013
On 07/16/2013 01:40 PM, JS wrote:
> The problem is I can't declare my "global" int variables directly inside
> the template. This does make it hard to use the same variable across
> multiple functions...
>
> template A
> {
> int c; // makes c near useless, can't use it like a normal it...
> }
Could you please provide complete code. The following works:
import std.stdio;
import std.conv;
template A()
{
int c;
}
string func(T)()
{
string result;
alias counter = A!().c;
for ( ; counter < 10; ++counter) {
result ~= counter.to!string;
}
return result;
}
void main()
{
writeln(func!int());
}
Prints:
0123456789
This works as well:
import std.stdio;
import std.conv;
template A()
{
int c;
string func()
{
string result;
for ( ; c < 10; ++c) {
result ~= c.to!string;
}
return result;
}
}
void main()
{
writeln(A!().func());
}
Prints the same:
0123456789
> the error message given obfuscates the reason.
What is the error message?
> Unfortunately it requires a messy technique to get around by using nested
> functions. (The parent function holds the global state of the child
> functions)
Well, this works as well:
import std.stdio;
import std.conv;
template A()
{
int c;
string globalFunc()
{
string result;
void func()
{
for ( ; c < 10; ++c) {
result ~= c.to!string;
}
}
func();
return result;
}
}
void main()
{
writeln(A!().globalFunc());
}
Again, prints the same:
0123456789
> It would be nice if we had some way to data globally(in module).
>
> e.g., __ctfestore["name"] = value;
I would expect model-level objects start their lives after the program
starts running but their initial value can be calculated during compile
time:
import std.stdio;
import std.conv;
int[string] ctfestore;
static this()
{
ctfestore = A!().globalFunc();
}
template A()
{
int c;
int[string] globalFunc()
{
int[string] result;
void func()
{
for ( ; c < 10; ++c) {
result[c.to!string] = c;
}
}
func();
return result;
}
}
void main()
{
writeln(ctfestore);
}
Prints:
["0":0, "4":4, "8":8, "1":1, "5":5, "9":9, "2":2, "6":6, "3":3, "7":7]
Ali
More information about the Digitalmars-d-learn
mailing list