Factory pattern in D

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


On Friday, 1 May 2015 at 10:46:20 UTC, Chris wrote:
> 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.

And thanks, by the way!


More information about the Digitalmars-d-learn mailing list