Classes in D and C++

Bill Baxter dnewsgroup at billbaxter.com
Sun Mar 4 23:49:32 PST 2007


Lionello Lunesu wrote:
> Andy Little wrote:
>> Hi all,
>>
>> I have been evaluating D over the last day in comparison to C++.
>>
>> The template metaprogramming stuff is great and I think its
>  > a real improvement over C++.
>>
>> Sadly though theshowstopper for me is user defined types
>  > ( classes). I was hoping that I could port my physical quantities
>  > library to D, but the killer is the difference between classes in
>  > D and C++.
>>
>> In C++ it is possible to create classes that act pretty much like
>  > inbuilt types. I used this to good effect in my quan library.
>>
>> Unfortunately in D although you can do:
>>
>> class X{
>>     this( int n_in){...}
>> }
>>
>> Its not possible it seems to do e.g this:
>>
>> X  x(3);
>>
>> rather you have to do:
>>
>> X x = new X(3);
> 
> Why don't you use "struct" instead? A struct can have functions, 
> operator overloads, just no constructor/destructor/virtuals, but for 
> simple types these shouldn't be needed. For custom types that behave as 
> value types, you should be using a "struct" instead of a class.
> 
> Instead of a constructor, create a "static opCall". opCall is the 
> overload for "(..)" so you can instantiate your type similar to C++:
> 
> struct SomeType {
>   int member = 0;// default initializer here
>   static SomeType opCall( int whatever ) {
>     SomeType st;
>     st.member = whatever;//custom initialize
>     return st;
>   }
>   //...
> }
> 
> SomeType st = 2;//construction
> 
> No need for constructors ;)
> 
> L.

I don't think that quite works as you wrote.
I think it needs to be
    SomeType st = SomeType(2);
or
    auto st = SomeType(2);

if you want to avoid repeating your repeat-avoiding self repeatedly.

--bb



More information about the Digitalmars-d mailing list