Framework design, initialization and framework usage

Robert M. Münch robert.muench at saphirion.com
Tue May 7 17:21:52 UTC 2019


On 2019-05-07 09:06:03 +0000, Kagamin said:

> struct myFramework {
> 	myFrameworkAccessor myFWApp;
> }
> 
> interface myFrameworkApp {
> 	void init();
> }
> 
> main(){
> 	myFramework mf = new myFramework;
> 
> 	mf.myFWApp.init(); // this bombs because myFWApp is NULL
> }
> 
> struct myFrameworkAccessor {
> 	myFrameworkApp instance()
> 	{
> 		if(_instance==null)_instance=new myAppCode();
> 		return _instance;
> 	}
> 	myFrameworkApp _instance;
> 	alias instance this;
> }
> 
> class myAppCode : myFrameworkApp {
> 	void init() {...}
> }

I had to make some changes:

1. struct myFramework 	=> class myFramework

2. mf.myFWApp.init()		=> change into two different steps. Otherwise I 
get an: Error: no property opCall for type 
app_framework.myFrameworkApp, did you mean new myFrameworkApp?


import std.experimental.all;

struct myFrameworkAccessor {
	myFrameworkApp instance()
	{
		if(_instance is null) _instance = new myAppCode();
		return _instance;
	}
	myFrameworkApp _instance;
	alias instance this;
}

class myFramework {
	myFrameworkAccessor myFWApp;
}

interface myFrameworkApp {
	void init();
}

class myAppCode : myFrameworkApp {
	void init() {}
}

void main(){
	myFramework mf = new myFramework;
	myFrameworkApp ma = mf.myFWApp;

	ma.init();
}


-- 
Robert M. Münch
http://www.saphirion.com
smarter | better | faster



More information about the Digitalmars-d-learn mailing list