On 9/1/20 2:19 PM, Andrey Zherikov wrote:
On Monday, 31 August 2020 at 20:44:16 UTC, Adam D. Ruppe wrote:
On Monday, 31 August 2020 at 20:39:10 UTC, Andrey Zherikov wrote:
How can I do that?
You can use a normal string[] BUT it is only allowed to be modified
inside its own function.
Then you assign that function to an enum or whatever.
string[] ctGenerate() {
string[] list;
list ~= "stuff";
return list;
}
enum list = ctGenerate();
That's all allowed. But CTFE is now allowed to read or modify anything
outside its own function; you can't have two separate function calls
build up a shared list (unless you can somehow call them both together
like `enum list = ctGenerate() ~ other_thing();`
The thing I'm trying to implement is: I have a function foo(string s)()
and some "state"; this function should override this "state" (using "s"
param) for all code within this function (note that code can execute
other modules that can refer to the same "state"). The problem is that I
need this overridden "state" to be compile-time constant to be used in
mixin. Any ideas how I can do this?
string overrideState(string s)
{
// work your magic here, it's normal D code!
}
void foo(string s)()
{
mixin(overrideState(s));
}
-Steve