Documentation of CSL
initSanitizer.h
1 #pragma once
2 
3 #include <iostream>
4 #include <cassert>
5 
6 namespace csl {
7 
20 template<typename T>
22 
23 public:
24 
25  constexpr InitSanitizer()
26  {
27 
28  }
29 
30  constexpr InitSanitizer(char const t_name[])
31  :name(t_name)
32  {
33 
34  }
35 
36  InitSanitizer(T const &t) {
37  this->operator=(t);
38  }
39 
40  InitSanitizer &operator=(T const &t) {
41  m_safe = true;
42  m_value = t;
43  return *this;
44  }
45 
46  operator T () const {
47  return get();
48  }
49 
50  T get() const {
51  if (!m_safe) {
52  std::cerr << "Error: param \"" << name << "\" is used ";
53  std::cerr << "uninitialized, please assign it a m_value using ";
54  std::cerr << "standard m_value assignement.\n";
55  assert(false);
56  }
57  return m_value;
58  }
59 
60  void reset() {
61  m_safe = false;
62  }
63 
64  void print(std::ostream &out = std::cout) const
65  {
66  if (m_safe)
67  out << name << " = " << m_value << '\n';
68  else
69  out << name << " uninitialized.\n";
70  }
71 
72  friend
73  std::ostream &operator<<(
74  std::ostream &out,
75  InitSanitizer const &san
76  )
77  {
78  out << san.m_value;
79  return out;
80  }
81 
82 public:
83 
84  char const *name;
85 
86 private:
87 
88  T m_value;
89  bool m_safe { false };
90 };
91 
92 } // namespace csl
Namespace for csl library.
Definition: abreviation.h:34
Encapsulates a value of a given to ensure that it initialized when used.
Definition: initSanitizer.h:21