xtd 0.2.0
object.hpp
Go to the documentation of this file.
1
4#pragma once
5
6#define __XTD_STD_INTERNAL__
8#undef __XTD_STD_INTERNAL__
9#define __XTD_CORE_INTERNAL__
12#undef __XTD_CORE_INTERNAL__
14#include "core_export.hpp"
15#include "iequatable.hpp"
16#include "size.hpp"
17#if defined(__xtd__cpp_lib_format)
18#include <cassert>
19#include <format>
20#include <memory>
21#endif
22#include <type_traits>
23
25namespace xtd {
27 class type_object;
29
45 public:
47
51 object() = default;
53
55 object(const object&) = default;
56 object& operator =(const object&) = default;
57 virtual ~object() = default;
58 bool operator ==(const object& obj) const noexcept;
59 bool operator !=(const object& obj) const noexcept;
61
63
71 virtual bool equals(const object& obj) const noexcept;
72
75 virtual xtd::size get_hash_code() const noexcept;
76
82 virtual type_object get_type() const noexcept;
83
100 template<class object_t>
101 xtd::unique_ptr_object<object_t> memberwise_clone() const;
102
108 virtual xtd::string to_string() const noexcept;
110
112
121 template<class object_a_t, class object_b_t>
122 static bool equals(const object_a_t& object_a, const object_b_t& object_b) noexcept {
123 static_assert(std::is_base_of<xtd::object, object_a_t>::value, "object_a does not inherit from xtd::object");
124 static_assert(std::is_base_of<xtd::object, object_b_t>::value, "object_b does not inherit from xtd::object");
125 return object_a == object_b;
126 }
127
135 template<class object_a_t, class object_b_t>
136 static bool reference_equals(const object_a_t& object_a, const object_b_t& object_b) noexcept {
137 static_assert(std::is_base_of<xtd::object, object_a_t>::value, "object_a does not inherit from xtd::object");
138 static_assert(std::is_base_of<xtd::object, object_b_t>::value, "object_b does not inherit from xtd::object");
139 return &object_a == &object_b;
140 }
141
142 };
143}
144
146std::ostream& operator <<(std::ostream& os, const xtd::object& obj) noexcept;
148
149#include "type.hpp"
150
151/*
154#if defined(__xtd__cpp_lib_format)
155template <>
156struct std::formatter<xtd::object> : std::formatter<std::string> {
157 template<class object_t, class format_context_t>
158 auto format(const object_t& obj, format_context_t& ctx) const {return std::format_to(ctx.out(), "{}", std::string {obj.to_string()});}
159};
160#endif
162*/
Contains string definitions.
Contains xtd::unique_ptr_object definition.
Contains __xtd_std_version definitions.
Supports all classes in the xtd class hierarchy and provides low-level services to derived classes....
Definition object.hpp:44
virtual bool equals(const object &obj) const noexcept
Determines whether the specified object is equal to the current object.
virtual type_object get_type() const noexcept
Gets the type of the current instance.
virtual xtd::size get_hash_code() const noexcept
Serves as a hash function for a particular type.
static bool reference_equals(const object_a_t &object_a, const object_b_t &object_b) noexcept
Determines whether the specified object instances are the same instance.
Definition object.hpp:136
xtd::unique_ptr_object< object_t > memberwise_clone() const
Creates a shallow copy of the current object.
object()=default
Create a new instance of the ultimate base class object.
virtual xtd::string to_string() const noexcept
Returns a xtd::string that represents the current object.
Represents type declarations: class types, interface types, array types, value types,...
Definition type_object.hpp:39
Contains core_export_ keyword.
#define core_export_
Define shared library export.
Definition core_export.hpp:13
size_t size
Represents a size of any object in bytes.
Definition size.hpp:23
Contains xtd::iequatable interface.
The xtd namespace contains all fundamental classes to access Hardware, Os, System,...
Definition abstract_object.hpp:8
Contains xtd::helpers::exception_case enum class.
Contains xtd::type type.
Contains xtd::size type.