qxLib
copyable_movable.h
Go to the documentation of this file.
1 /**
2 
3  @file copyable_movable.h
4  @author Khrapov
5  @date 7.08.2022
6  @copyright © Nick Khrapov, 2022. All right reserved.
7 
8 **/
9 #pragma once
10 
11 #include <qx/macros/common.h>
12 
13 /**
14  @def QX_COPYABLE
15  @brief Define class as default copyable
16  @param className - class name
17 **/
18 #define QX_COPYABLE(className) \
19 public: \
20  className(const className&) = default; \
21  className& operator=(const className&) = default; \
22  \
23 private: \
24  QX_EMPTY_MACRO
25 
26 /**
27  @def QX_MOVABLE
28  @brief Define class as default movable
29  @param className - class name
30 **/
31 #define QX_MOVABLE(className) \
32 public: \
33  className(className&&) noexcept = default; \
34  className& operator=(className&&) noexcept = default; \
35  \
36 private: \
37  QX_EMPTY_MACRO
38 
39 /**
40  @def QX_COPYMOVABLE
41  @brief Define class as default copyable and movable
42  @param className - class name
43 **/
44 #define QX_COPYMOVABLE(className) \
45  QX_COPYABLE(className); \
46  QX_MOVABLE(className)
47 
48 /**
49  @def QX_NONCOPYABLE
50  @brief Define class as non copyable
51  @param className - class name
52 **/
53 #define QX_NONCOPYABLE(className) \
54  className(const className&) = delete; \
55  className& operator=(const className&) = delete
56 
57 /**
58  @def QX_NONMOVABLE
59  @brief Define class as non movable
60  @param className - class name
61 **/
62 #define QX_NONMOVABLE(className) \
63  className(className&&) noexcept = delete; \
64  className& operator=(className&&) noexcept = delete
65 
66 /**
67  @def QX_NONCOPYMOVABLE
68  @brief Define class as non copyable and non movable
69  @param className - class name
70 **/
71 #define QX_NONCOPYMOVABLE(className) \
72  QX_NONCOPYABLE(className); \
73  QX_NONMOVABLE(className)