On Wednesday, 1 September 2021 at 19:54:14 UTC, user1234 wrote:
On Wednesday, 1 September 2021 at 16:02:47 UTC, james.p.leblanc
wrote:
Dear D-ers,
For simple plotting using a gnuplot process, I have created a
singleton object (a stripped
down minimal working example is below.)
[...]
**However, those wrapper functions in the gnuplot_mod module
looks a bit silly.**
[...]
Any suggestions on a better way are greatly appreciated.
Best Regards,
James
hello, I'd suggest this:
```d
shared static this() {
get(); // cache instance before main(){}
// to get rid of the synchronized() stmt
}
static Gnuplot get() {
__gshared Gnuplot instance;
return instance ? instance : (instance = new Gnuplot());
}
```
user1234,
Thanks for your reply, I will need to look at it deeper.
I also realize that my post was not so clear, to clarify:
I needed to implement two wrapper functions ... that are **in**
the
module, but **outside** of the object, copied below:
**void cmd(string txt){**
**Gnuplot gp;**
**gp = gp.get();**
**gp.cmd(txt);**
**}**
**void plot(double[] x, string txt){**
**Gnuplot gp;**
**gp = gp.get();**
**gp.plot(x, txt);**
**}**
These enable use of the UFCS in main() (without prefixing with
instantiated object's name
**gp** ). The gp prefix only needs to be in these wrappers that
exist in the module, not in the main().
The question is if there is a way to enable UFCS without such
wrapper
(see example in main() in original posting).
Thanks again, and now I need to play a bit with your suggestion
to learn
from it.
Best Regards,
James