etrobocon2019 feat.KatLab  ece30a9a007fff7d3ad48592c0d09a74643377bb
Logger.h
[詳解]
1 
7 #ifndef LOGGER_H
8 #define LOGGER_H
9 #include <cstdio>
10 #include <cstdarg>
11 #include <cassert>
12 #include <type_traits>
13 
14 namespace LogFile {
16  private:
17  FILE* fp;
18  bool isHead;
19 
20  public:
21  TemporaryObject(FILE* fp_);
30  void putDelimiter();
31 
37  template <typename T,
38  typename std::enable_if<std::is_integral<T>::value, std::nullptr_t>::type = nullptr>
40  {
41  putDelimiter();
42  fprintf(fp, "%d", intValue);
43  return *this;
44  }
45 
51  template <typename T,
52  typename std::enable_if<std::is_floating_point<T>::value, std::nullptr_t>::type
53  = nullptr>
54  TemporaryObject& operator<<(T floatingPointValue)
55  {
56  putDelimiter();
57  fprintf(fp, "%f", floatingPointValue);
58  return *this;
59  }
60 
66  template <typename T,
67  typename std::enable_if<std::is_same<T, const char*>::value>::type* = nullptr>
68  TemporaryObject& operator<<(T stringLiteral)
69  {
70  putDelimiter();
71  fprintf(fp, "%s", stringLiteral);
72  return *this;
73  }
74  };
75 } // namespace LogFile
76 
77 class Logger {
78  private:
79  FILE* fp;
80 
81  public:
86  Logger(const char* fileName = "log.csv", const char* mode = "w");
87 
91  ~Logger();
92 
98  void write(const char* format, ...);
99 
105  template <typename T>
107  {
108  LogFile::TemporaryObject object(fp);
109  object << data;
110  return object;
111  }
112 };
113 
114 #endif
Definition: Logger.h:77
Definition: Logger.h:14
TemporaryObject(FILE *fp_)
Definition: Logger.cpp:8
~TemporaryObject()
行末に改行を挿入する
Definition: Logger.cpp:10
TemporaryObject & operator<<(T intValue)
整数型のデータを出力ファイルに書き込む Usage: foo << 1 << 2 << 3; (自動的にデリミターと改行が挿入さ...
Definition: Logger.h:39
TemporaryObject & operator<<(T stringLiteral)
文字列を出力ファイルに書き込む Usage: foo << "aa" << "bb" (自動的にデリミターと改行が挿入される) ...
Definition: Logger.h:68
TemporaryObject & operator<<(T floatingPointValue)
浮動小数点数型のデータを出力ファイルに書き込む Usage: foo << 1.2 << 2.4 << 3.98; (自動的にデリミター...
Definition: Logger.h:54
void putDelimiter()
データの先頭にデリミタ―を挿入する
Definition: Logger.cpp:15
LogFile::TemporaryObject operator<<(T data)
指定したデータを出力ファイルに書き込む Usage: foo << 1 << 2.4 << "aa"; (自動的にデリミターと改行が挿...
Definition: Logger.h:106