On Sep 30, 2010, at 5:12 PM, Martin Robinson wrote:

> It does not use compile-time settings, but template specialization.

If we can collapse multiple smart pointer types based on overloading, I think 
that’s great. In those cases, I think it’s OK to have a single RefPtr class 
that can handle multiple types as long as we can come up with a good name. But 
I don’t see a “Platform” concept here. It’s just a RefPtr that can handle a set 
of types that can all be distinguished at compile time.

I don’t think template specialization is needed. All we need is a single pair 
of functions that implement the ref/deref operations. Those functions can be 
overloaded for any number of types as long as the overloading is unambiguous.

It may seem like we can’t do this for RefPtr, but we almost certainly can. It 
currently works with any class with a ref and deref function, but recently I 
added this new feature,“adopted”, and overloaded it for every type. With a 
little bit of work Ithink we can make RefPtr work for the types inside WebKit 
but also for GObject, and Cairo. That will mean that RefPtr and PassRefPtr will 
both work for all of those. We can then add additional support for other types 
as long as they have base classes that can be distinguished for function 
overloading. I believe we can make this work for JSStringRef too, which means 
we could eliminate JSRetainPtr.

Because the base class for Core Foundation is just a “const void*”, we can’t 
use this to eliminate RetainPtr, but I think we can eliminate almost all the 
other classes this way.

    -- Darin

_______________________________________________
webkit-dev mailing list
[email protected]
http://lists.webkit.org/mailman/listinfo.cgi/webkit-dev

Reply via email to