Thread overview
Compare struct against null
Apr 28, 2008
Heinz
Apr 28, 2008
downs
Apr 29, 2008
Heinz
Apr 29, 2008
Simen Kjaeraas
Apr 29, 2008
downs
April 28, 2008
Hi,

I have a simple struct and i want to check if a variable has been asigned:

struct hello
{

}
...
hello h;
...
if(!h)
{
do stuff;
}

When compiling i get erros about opCall not implemented and many others. What can i do?

Thanks in advance.
April 28, 2008
Heinz wrote:
> Hi,
> 
> I have a simple struct and i want to check if a variable has been asigned:
> 
> struct hello
> {
> 
> }
> ...
> hello h;
> ...
> if(!h)
> {
> do stuff;
> }
> 
> When compiling i get erros about opCall not implemented and many others. What can i do?
> 
> Thanks in advance.

Structs are value types. Read the spec. Then use a pointer :)

hello* h;

if (!h) h = new hello;

 --downs
April 29, 2008
downs Wrote:

> Heinz wrote:
> > Hi,
> > 
> > I have a simple struct and i want to check if a variable has been asigned:
> > 
> > struct hello
> > {
> > 
> > }
> > ...
> > hello h;
> > ...
> > if(!h)
> > {
> > do stuff;
> > }
> > 
> > When compiling i get erros about opCall not implemented and many others. What can i do?
> > 
> > Thanks in advance.
> 
> Structs are value types. Read the spec. Then use a pointer :)
> 
> hello* h;
> 
> if (!h) h = new hello;
> 
>  --downs

Thanks for your reply. Can i use then?:
 hello h;
if(!&h)
April 29, 2008
On Tue, 29 Apr 2008 06:50:18 +0200, Heinz <malagana15@yahoo.es> wrote:

> downs Wrote:
>> Structs are value types. Read the spec. Then use a pointer :)
>>
>> hello* h;
>>
>> if (!h) h = new hello;
>>
>>  --downs
>
> Thanks for your reply. Can i use then?:
>  hello h;
> if(!&h)


No. &h will always return a non-null pointer (h exists, in other words).

You might use some convoluted workaround to make hello aware of whether or
not it has been assigned something.

Easy example:

struct hello
{
  bool assigned;
  // other fields;
}

hello h;

h = hello(true, ...);

if (h.assigned)
  DoSomethingOrOther();


This may or may not be enough for you needs.

-- Simen
April 29, 2008
Heinz wrote:
> downs Wrote:
> 
>> Heinz wrote:
>>> Hi,
>>>
>>> I have a simple struct and i want to check if a variable has been asigned:
>>>
>>> struct hello
>>> {
>>>
>>> }
>>> ...
>>> hello h;
>>> ...
>>> if(!h)
>>> {
>>> do stuff;
>>> }
>>>
>>> When compiling i get erros about opCall not implemented and many others. What can i do?
>>>
>>> Thanks in advance.
>> Structs are value types. Read the spec. Then use a pointer :)
>>
>> hello* h;
>>
>> if (!h) h = new hello;
>>
>>  --downs
> 
> Thanks for your reply. Can i use then?:
>  hello h;
> if(!&h)

No.
Structs are *value types*.

That means, unless _explicitly newed_ (or part of a struct that's explicitly newed), they _always_ live on the stack.

Ergo, if &h is null, your complete callstack is shot :)

 --downs