Windows bindings
Steven Schveighoffer
schveiguy at gmail.com
Sat Feb 13 16:01:26 UTC 2021
On 2/13/21 4:40 AM, Rumbu wrote:
> On Saturday, 13 February 2021 at 08:25:21 UTC, Jonathan Marler wrote:
>>
>> One thing you could do is define a common method that calls it:
>>
>> struct HDC
>> {
>> auto free()
>> {
>> return CloseDC(this.value);
>> }
>> }
>>
>> struct HANDLE
>> {
>> auto free()
>> {
>> return CloseHandle(this.value);
>> }
>> }
>
> Excellent idea! I can take it further, why not a destructor?
>
> struct HDC
> {
> ~this()
> {
> CloseDC(this.value);
> }
> }
Don't do this, because it will close on copying too.
In order to *properly* implement this, it would need reference counting.
A nice feature would be to implement a common method (like free), and
then provide a reference-counting wrapper that would then call the
appropriate thing when refcount is 0.
Another possibility is to define a freeFunction template that can be
applied as an attribute:
template freeFunction(alias f)
{
alias fn = f;
}
@freeFunction!CloseDC struct HDC ...
And then an appropriate free function can be called when the UDA is
detected.
-Steve
More information about the Digitalmars-d
mailing list