Factory pattern in D

Chris via Digitalmars-d-learn digitalmars-d-learn at puremagic.com
Fri May 1 03:46:19 PDT 2015


On Friday, 1 May 2015 at 10:27:16 UTC, biozic wrote:
> On Friday, 1 May 2015 at 10:12:36 UTC, Chris wrote:
>> On Friday, 1 May 2015 at 10:04:46 UTC, Namespace wrote:
>>> How about this:
>>>
>>> ----
>>> struct A {
>>> int x = 42;
>>> }
>>>
>>> struct B {
>>> int x = 7;
>>> }
>>>
>>> T factory(T)() {
>>> return T();
>>> }
>>>
>>> void main()
>>> {
>>> auto a = factory!(A);
>>> }
>>> ----
>>
>> That's what I was looking for, I just couldn't get it right. 
>> Thanks.
>>
>> Rikki:
>>
>> I wanted to avoid classes and interfaces.
>
> This might be a bit more useful:
> ---
> struct A {
>   int x = 42;
> }
>
> struct B {
>   int x = 7;
> }
>
> auto factory(string type = "")() {
>   static if (type == "A")
>     return A();
>   else static if (type == "B")
>     return B();
>   else
>     return A();  // default
> }
>
> void main()
> {
>   auto a = factory!"A";
>   auto b = factory!"B";
>   auto x = factory;
> }
> ---

Duh, I tried `static if` yesterday and I still got "Error: 
mismatched function return type inference of B and A". Now it 
works! Sure, I must have overlooked something. Sometimes it's 
better to go home and call it a day than to try to get something 
to work.


More information about the Digitalmars-d-learn mailing list