On 8/4/19 10:53 AM, Snir Sheriber wrote:

On 8/1/19 7:17 PM, Frediano Ziglio wrote:
---

This patch is not really necessary, just a suggestion, it's a bit hacky
but would save some code.
Other options would be to use explicit template specialization or to
leave it as is.

Sure, what I don't like is that is surely not type safe, you can instantiate
a GstMiniObjectUPtr of whatever, even an "int" type and compiler won't
complain at all, witch is a good thing of C++.
I'm thinking possible changes to this patch like traits and/or macros to
declare allowed types.
Certain the type is getting a bit long ("GstMiniObjectUPtr<GstSample>"),
but this could be solve by typedefs (well, this was solved by using lines).

What about:


template <typename T>
struct is_gst_mini_type {
};

template <typename T, typename = typename is_gst_mini_type<T>::type>
struct GstMiniObjectDeleter {
     void operator()(T* p)
     {
         gst_mini_object_unref(GST_MINI_OBJECT_CAST(p));
     }
};

template <typename T>
using GstMiniObjectUPtr = std::unique_ptr<T, GstMiniObjectDeleter<T>>;

#define DECLARE_GST_MINI_TYPE(name) \
template <> struct is_gst_mini_type<name> { \
         typedef name *type; \
}; \
using name ## UPtr = GstMiniObjectUPtr<name>;

DECLARE_GST_MINI_TYPE(GstSample)


Actually also the GstObjectUPtr is not really type safe

I'm not sure i wouldn't prefer to just do something like this for
simplicity:

template <typename T>
struct GstDeleter {
     void operator()(T* p)
     {
         gst_object_unref(p);
     }
};


Can we somehow pass the unref-function in the template ?
template <typename T, function f>
struct GstDeleter {
   ...


Uri.
_______________________________________________
Spice-devel mailing list
[email protected]
https://lists.freedesktop.org/mailman/listinfo/spice-devel

Reply via email to