static map as a type function
Adam D. Ruppe
destructionator at gmail.com
Thu Sep 24 19:00:35 UTC 2020
Andrei beat me to the test implementation, it is good it kinda
works.
On Thursday, 24 September 2020 at 16:40:21 UTC, Stefan Koch wrote:
> You still have the problem of spamming the executable with
> those type-info objects.
linker can strip that.
> And you have the problem of having to eagerly generate the
> entire object.
Yeah, this is a potential major limitation: you can only use the
data available there. But you could define your own classes that
provide new data (can we have CTFE only classes as well as
functions?!) as well as limit data you don't need.
Would be a new templated class instance per type which MIGHT
runaway but not too bad.
But like you said in the other message the other issue is getting
the original type T back out of the polymorphic typeinfo
interface... if you need it. But maybe you could still have one
template returning that and just using typeinfo for its internal
intermediate calculations. (TypeInfo -> T can be done for a
limited set by linear search. You cant pass a class instance as a
template argument (alas... that restriction could *perhaps* be
lifted in general tho), but one of the virtual methods could
return a numeric id or string that is an index into a limited
list of options.
```
class MyTypeInfo { immutable this(string name) { this.name =
name; } string name;}
template mytypeid(T) {
static immutable MyTypeInfo store = new immutable
MyTypeInfo(T.stringof);
immutable(MyTypeInfo) mytypeid() { return store; }
}
template Tof(string name) {
alias Tof = mixin(name);
}
immutable(MyTypeInfo) getTheString(immutable MyTypeInfo a,
immutable MyTypeInfo b) {
if(a is mytypeid!string)
return a;
return b;
}
void main() {
Tof!(mytypeid!(int).name) i;
static assert(is(typeof(i) == int));
i = 4;
Tof!(getTheString(mytypeid!int, mytypeid!string).name) s;
static assert(is(typeof(s) == string));
}
```
Obviously the stringof and mixin stuff does NOT work in general,
as I talk about every chance I get (DON'T USE STRINGOF!!!!!), but
the general approach here is plausible... at least given a
limited set of options going into it.
More information about the Digitalmars-d
mailing list