[libcamera-devel] [PATCH v2 2/6] libcamera: class: Provide move and copy disablers
Kieran Bingham
kieran.bingham at ideasonboard.com
Fri Feb 12 12:55:34 CET 2021
On 11/02/2021 21:08, Laurent Pinchart wrote:
> Hi Kieran,
>
> Thank you for the patch.
>
> On Thu, Feb 11, 2021 at 01:34:40PM +0000, Kieran Bingham wrote:
>> It can be difficult to correctly parse the syntax for copy/move and the
>> associated assignment operators.
>>
>> Provide helpers as syntactic sugar to facilitate disabling either the
>> copy constructor, and copy assignment operator, and the move constructor
>> and move assignment operator in a way which is explicit and clear.
>>
>> Signed-off-by: Kieran Bingham <kieran.bingham at ideasonboard.com>
>> ---
>> include/libcamera/class.h | 12 ++++++++++++
>> src/libcamera/class.cpp | 18 ++++++++++++++++++
>> 2 files changed, 30 insertions(+)
>>
>> diff --git a/include/libcamera/class.h b/include/libcamera/class.h
>> index 2d9b7ebfdb08..5cd31d1b9f37 100644
>> --- a/include/libcamera/class.h
>> +++ b/include/libcamera/class.h
>> @@ -11,6 +11,18 @@
>>
>> namespace libcamera {
>>
>> +#define LIBCAMERA_DISABLE_COPY(klass) \
>> + klass(const klass &) = delete; \
>> + klass &operator=(const klass &) = delete
>
> I'd add a ; here as other similar macros include the last ;.
>
lots of extra semi-colons but yes, I remember that was previously discussed.
>> +
>> +#define LIBCAMERA_DISABLE_MOVE(klass) \
>> + klass(klass &&) = delete; \
>> + klass &operator=(klass &&) = delete
>> +
>> +#define LIBCAMERA_DISABLE_COPY_AND_MOVE(klass) \
>> + LIBCAMERA_DISABLE_COPY(klass); \
>> + LIBCAMERA_DISABLE_MOVE(klass)
That's now going to add two extra semi-colons of course ;-) But there's
no difference between one, two or more 'free' semi-colons;;;; so it
should be fine.
>> +
>> #ifndef __DOXYGEN__
>> #define LIBCAMERA_DECLARE_PRIVATE(klass) \
>> public: \
>> diff --git a/src/libcamera/class.cpp b/src/libcamera/class.cpp
>> index 8a608edb369b..b081d05ec3ac 100644
>> --- a/src/libcamera/class.cpp
>> +++ b/src/libcamera/class.cpp
>> @@ -17,6 +17,24 @@
>>
>> namespace libcamera {
>>
>> +/**
>> + * \def LIBCAMERA_DISABLE_COPY
>> + * \brief Delete the copy constructor and assignment operator.
>
> s/.$// and same below. I'd write "Disable copy construction and
> assignment of the \a klass" to match the macro name.
>
>> + * \param klass The identifier of the class to modify
>
> s/identifier/name/
>
> and s/to modify/for which to disable copy/ ?
'for which to' sounds hideous and sparks my Grammar-Warning-Light.
Anything else I can think of duplicates the brief and becomes really long.
Other uses of klass throughout this file simply call it
"The public class name"
Given the brief is already descriptive, I don't think we need to
duplicate the actions.
> I'd also add example usage :
>
> * To disable copy of a class, use the LIBCAMERA_DISABLE_COPY macro in
> * the private section of the of the class declaration:
> *
> * \code{.cpp}
> * class NonCopyable
> * {
> * public:
> * NonCopyable();
> * ...
> *
> * private:
> * LIBCAMERA_DISABLE_COPY(NonCopyable)
> * };
> * \encode
>
> Same below.
Added.
>
>> + */
>> +
>> +/**
>> + * \def LIBCAMERA_DISABLE_MOVE
>> + * \brief Delete the move construtor and assignment operator.
>> + * \param klass The identifier of the class to modify
>> + */
>> +
>> +/**
>> + * \def LIBCAMERA_DISABLE_COPY_AND_MOVE
>> + * \brief Delete all copy and move constructors, and assignment operators.
>> + * \param klass The identifier of the class to modify
>> + */
>> +
>> /**
>> * \def LIBCAMERA_DECLARE_PRIVATE
>> * \brief Declare private data for a public class
>
--
Regards
--
Kieran
More information about the libcamera-devel
mailing list