xxxxxxxxxx
void main()
{
StaticThingy.register(new SomeAdapter());
StaticThingy.createSome!Dummy();
}
struct FooBundle(Handle)
{
FooDummy fooDummy;
Handle handle;
}
interface FooAdapter
{
FooBundle!(Handle) createSome(Handle)();
}
class FooDummy
{
}
struct StaticThingy
{
this();
static:
private
{
FooAdapter _fooAdapter;
}
private nothrow
{
{
FooAdapter fooAdapter()
{
assert(_fooAdapter !is null);
return _fooAdapter;
}
}
}
public
{
FooBundle!(Handle) createSome(Handle)()
{
return fooAdapter.createSome!(Handle)();
}
void register(FooAdapter fooAdapter) nothrow
{
_fooAdapter = fooAdapter;
}
}
}
class Dummy
{
}
alias Bundle = FooBundle!(Dummy);
private class SomeAdapter : FooAdapter
{
Bundle createSome()
{
auto w = new Dummy();
auto c = new FooDummy();
auto b = Bundle(c, w);
return b;
}
}