Home work №3 "C++ Developer. Professional" OTUS
0.0.1
|
Go to the documentation of this file.
16 #define _PRETTY_ __PRETTY_FUNCTION__
20 #define DEBUG_MODE(x) (x)
28 #include <type_traits>
29 #include <experimental/iterator>
34 using enable_integral_t = std::enable_if_t<std::is_integral_v<T> && !std::is_same_v<T, bool>>;
37 template<
typename T,
template<
typename>
class Cont>
38 using enable_containers_t = std::enable_if_t<std::is_same_v<std::decay_t<Cont<T>>, std::vector<T>>
39 || std::is_same_v<std::decay_t<Cont<T>>, std::list<T>>>;
43 using enable_string_t = std::enable_if_t<std::is_same_v<std::decay_t<T>, std::string>>;
46 template<
typename T,
typename... Tail>
50 template<
typename T,
class = enable_
integral_t<T>>
58 for(
size_t index = in_param.
type_size; index; index--)
73 template <
typename T,
typename ... Ts>
74 void print_args(std::ostream &cur_stream,
const T& first_arg,
const Ts& ...tail_args) {
76 cur_stream << first_arg;
77 (void)std::initializer_list<int>{((cur_stream <<
'.' << tail_args), 0)...};
82 template <
typename ... Ts>
83 std::ostream&
operator<<(std::ostream &cur_stream,
const std::tuple<Ts...>& in_parameter) {
85 auto print_to_stream = [&cur_stream](
const auto&... lyambda_args) {
89 std::apply(print_to_stream, in_parameter);
111 std::cout << param_ << std::endl;
129 using namespace tmp_;
142 template<
typename T,
template<
typename>
class Cont>
148 std::copy(std::begin(param_), std::end(param_), std::experimental::make_ostream_joiner(std::cout,
"."));
149 std::cout << std::endl;
160 template<
typename T,
typename... Tail>
166 using namespace tmp_;
168 std::cout << in_param << std::endl;
std::enable_if_t< std::is_integral_v< T > &&!std::is_same_v< T, bool > > enable_integral_t
Definition: print_ip.h:34
std::enable_if_t< std::conjunction_v< std::is_same< T, Tail >... > > enable_all_the_same_t
Definition: print_ip.h:47
tmp_::enable_string_t< T > generator_ip(const T ¶m_)
Printing some IP address implementation for a std::string.
Definition: print_ip.h:107
#define DEBUG_MODE(x)
Definition: print_ip.h:20
std::enable_if_t< std::is_same_v< std::decay_t< Cont< T > >, std::vector< T > >||std::is_same_v< std::decay_t< Cont< T > >, std::list< T > >> enable_containers_t
Definition: print_ip.h:39
#define _PRETTY_
Definition: print_ip.h:16
T value
Definition: print_ip.h:67
friend std::ostream & operator<<(std::ostream &cur_stream, const Integral_type_printer &in_param)
Definition: print_ip.h:56
uint8_t byte_represent[sizeof(T)]
Definition: print_ip.h:66
Integral_type_printer(const T &in_param)
Definition: print_ip.h:54
void print_args(std::ostream &cur_stream, const T &first_arg, const Ts &...tail_args)
Definition: print_ip.h:74
static constexpr size_t type_size
Definition: print_ip.h:69
std::ostream & operator<<(std::ostream &cur_stream, const std::tuple< Ts... > &in_parameter)
Definition: print_ip.h:83
std::enable_if_t< std::is_same_v< std::decay_t< T >, std::string > > enable_string_t
Definition: print_ip.h:43
Definition: print_ip.h:51
Definition: print_ip.h:31