How to wrap SDL?

Dan Olson zans.is.for.cans at yahoo.com
Sun Jan 23 16:00:56 PST 2011


Sean Eskapp <eatingstaples at gmail.com> writes:

> == Quote from Andrej Mitrovic (andrej.mitrovich at gmail.com)'s article
>> You can use scoped!() from std.typecons:

snip

>> You must not escape a reference to the object outside of the foo()
>> scope. Note that you will get a runtime error if you try to do
>> something like this:
>> import std.stdio;
>> import std.typecons;
>> class A
>> {
>>     ~this()
>>     {
>>         writeln("A destructor");
>>     }
>> }
>> auto foo()
>> {
>>     auto a1 = scoped!A();
>>     return a1;
>> }
>> void main()
>> {
>>     auto result = foo();
>>     writeln("exiting..");
>> }
>> Illegal call to Scoped this(this)
>> A destructor
>> core.exception.AssertError at std.typecons(2506): Assertion failure
>
> But these can't be passed to functions either, meaning I can't pass a Screen,
> Text, or Font wrapper around, all of which I use in my project!

It should be ok to pass A to a function for temporary use.

{
  auto a1 = scoped!A();
  dostuff(a1);
}

void dostuff(A a)
{
  // .. but don't hang on to 'a' because dtor will be eventually called
}

Dan


More information about the Digitalmars-d-learn mailing list