Thread overview
Implicit conversion with ctor like C++
Sep 08, 2015
Pierre
Sep 08, 2015
Pierre
Sep 08, 2015
Meta
Sep 08, 2015
Pierre
September 08, 2015
Hi everybody,

I would like to use implicit conversion like this:

//Sample class
class MyClass
{
   this(string MyValue){...}
}

//Called function
void MyFunction(Foo MyFoo){}

void main()
{
  MyFunction("Hello World!"); //Failed : MyFunction not callable...
}

I saw in forum this is OK because D doesn't do implicit conversion with ctor like C++
But how can I do ? May I use alias ?

Thank you for your attention.


September 08, 2015
I made a mistake it's more like:

 //Sample class
 class CClass
 {
    this(string MyValue){...}
 }

 //Called function
 void MyFunction(CClass MyClass){}

 void main()
 {
   MyFunction("Hello World!"); //Failed : MyFunction not  callable...
 }

September 08, 2015
On Tuesday, 8 September 2015 at 19:23:47 UTC, Pierre wrote:
> Hi everybody,
>
> I would like to use implicit conversion like this:
>
> //Sample class
> class MyClass
> {
>    this(string MyValue){...}
> }
>
> //Called function
> void MyFunction(Foo MyFoo){}
>
> void main()
> {
>   MyFunction("Hello World!"); //Failed : MyFunction not callable...
> }
>
> I saw in forum this is OK because D doesn't do implicit conversion with ctor like C++
> But how can I do ? May I use alias ?
>
> Thank you for your attention.

No, as far as I know, D does not support implicit construction of classes or structs. There is *some* implicit conversion allowed, but in the opposite direction.

struct Test
{
    string s;
    alias s this;

    //Necessary for nice construction syntax
    this(string s) { this.s = s; }
}

void foo(string s)
{
    writeln(s);
}

void main()
{
    Test t = "asdf";
    foo(t); //Prints "asdf"
}

So with alias this, you can pass a Test to a function expecting a string, but not vice-versa.
September 08, 2015
OK that's very clear thank you for the answer.