xtd 1.0.0
Loading...
Searching...
No Matches
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"
16#include "iequatable.hpp"
17#include "usize.hpp"
18#include <type_traits>
19
21namespace xtd {
23 class type_object;
25
41 public:
43
47 object() = default;
49
51 virtual ~object() = default;
52 auto operator ==(const object& obj) const noexcept -> bool;
53 auto operator !=(const object& obj) const noexcept -> bool;
55
57
65 [[nodiscard]] virtual auto equals(const object& obj) const noexcept -> bool;
66
69 [[nodiscard]] virtual auto get_hash_code() const noexcept -> xtd::usize;
70
76 [[nodiscard]] virtual auto get_type() const noexcept -> type_object;
77
94 template<typename object_t>
95 [[nodiscard]] auto memberwise_clone() const -> xtd::unique_ptr_object<object_t>;
96
102 [[nodiscard]] virtual auto to_string() const -> xtd::string;
104
106
115 template<typename object_a_t, typename object_b_t>
116 [[nodiscard]] static auto equals(const object_a_t& object_a, const object_b_t& object_b) noexcept -> bool {
117 static_assert(std::is_base_of<xtd::object, object_a_t>::value, "object_a does not inherit from xtd::object");
118 static_assert(std::is_base_of<xtd::object, object_b_t>::value, "object_b does not inherit from xtd::object");
119 return object_a == object_b;
120 }
121
129 template<typename object_a_t, typename object_b_t>
130 [[nodiscard]] static auto reference_equals(const object_a_t& object_a, const object_b_t& object_b) noexcept -> bool {
131 static_assert(std::is_base_of<xtd::object, object_a_t>::value, "object_a does not inherit from xtd::object");
132 static_assert(std::is_base_of<xtd::object, object_b_t>::value, "object_b does not inherit from xtd::object");
133 return &object_a == &object_b;
134 }
135
136 };
137
138 auto operator <<(std::ostream& os, const xtd::object& obj) noexcept -> std::ostream&;
140}
141
142
143#include "type.hpp"
Supports all classes in the xtd class hierarchy and provides low-level services to derived classes....
Definition object.hpp:40
auto memberwise_clone() const -> xtd::unique_ptr_object< object_t >
Creates a shallow copy of the current object.
virtual auto get_hash_code() const noexcept -> xtd::usize
Serves as a hash function for a particular type.
virtual auto to_string() const -> xtd::string
Returns a xtd::string that represents the current object.
static auto reference_equals(const object_a_t &object_a, const object_b_t &object_b) noexcept -> bool
Determines whether the specified object instances are the same instance.
Definition object.hpp:130
virtual auto equals(const object &obj) const noexcept -> bool
Determines whether the specified object is equal to the current object.
object()=default
Create a new instance of the ultimate base class object.
virtual auto get_type() const noexcept -> type_object
Gets the type of the current instance.
Represents type declarations: class types, interface types, array types, value types,...
Definition type_object.hpp:39
Contains core_export_ keyword.
Contains generic stream output methods.
#define core_export_
Define shared library export.
Definition core_export.hpp:13
std::size_t usize
Represents an unsigned size of any object in bytes.
Definition usize.hpp:22
Contains xtd::iequatable interface.
The xtd namespace contains all fundamental classes to access Hardware, Os, System,...
Definition abstract_object.hpp:8
Contains xtd::helpers::throw_helper class.
Contains xtd::type type.
Contains xtd::usize type.