Class References
Ali Çehreli
acehreli at yahoo.com
Wed Nov 20 10:17:25 PST 2013
On 11/20/2013 08:35 AM, Jeroen Bollen wrote:
> I was more looking for a way to just access a type/class by specifying
> an index... I don't really get your code.
TypeTuple can contain types. Do you know the index at compile time or at
run time? Here is a program that demonstrates constructing an object for
both of those cases:
module deneme;
import std.stdio;
import std.typetuple;
import std.string;
interface I
{}
class C1 : I
{}
class C2 : I
{}
// Question: Is there a way to determine the name of this module?
string moduleName = "deneme";
static const typeNames = [ "C1", "C2" ];
void makeWithCompileTimeIndex(size_t index)()
{
alias typeList = TypeTuple!(C1, C2);
alias Type = typeList[index];
auto o = new Type();
writefln("I made an object by using a compile-time index: %s", o);
}
void makeWithRunTimeIndex(size_t index)
{
string fullTypeName = format("%s.%s", moduleName, typeNames[index]);
auto o = cast(I)Object.factory(fullTypeName);
writefln("I made an object by using a run-time index: %s", o);
}
void main()
{
makeWithCompileTimeIndex!1();
writefln("I can make an object of these types: %s", typeNames);
write("Please enter the index of the type that you want: ");
size_t index;
readf(" %s", &index);
makeWithRunTimeIndex(index);
}
Ali
More information about the Digitalmars-d-learn
mailing list