Files
Renderive/Kernel/src/renderive/base/Concepts.hpp
T
2026-08-14 11:07:38 +08:00

33 lines
1018 B
C++

#pragma once
#include <concepts>
#include <type_traits>
template <class That>
concept Class_Type = std::is_class_v<That>;
template <class That>
concept Derivable_Type = Class_Type<That> && !std::is_final_v<That>;
template <class That>
concept Mutex_Type = std::default_initializable<That> && requires(That& mutex) {
{ mutex.lock() } -> std::same_as<void>;
{ mutex.unlock() } -> std::same_as<void>;
};
class Non_Copyable {
public:
Non_Copyable(const Non_Copyable&) = delete;
Non_Copyable& operator=(const Non_Copyable&) = delete;
Non_Copyable(Non_Copyable&&) = default;
Non_Copyable& operator=(Non_Copyable&&) = default;
protected:
Non_Copyable() = default;
~Non_Copyable() = default;
};
class Non_Movable {
public:
Non_Movable(const Non_Movable&) = default;
Non_Movable& operator=(const Non_Movable&) = default;
Non_Movable(Non_Movable&&) = delete;
Non_Movable& operator=(Non_Movable&&) = delete;
protected:
Non_Movable() = default;
~Non_Movable() = default;
};