dl
dl_string_n.h
浏览该文件的文档.
1
12#pragma once
13
14#include <cassert>
15#include <cstring>
16#include <string_view>
17#include <string>
18
19
20namespace dl
21{
23template<size_t N>
25{
26public:
27 char operator[](std::size_t i) const
28 {
29 assert(i < N);
30 return _data[i];
31 }
32 const char* c_str() const
33 {
34 _end = 0;
35 return _data;
36 }
37
40 void Fill(char v)
41 {
42 for (auto& iter : _data)
43 iter = v;
44 }
45
46 char* begin()
47 {
48 return &_data[0];
49 }
50 char* end()
51 {
52 return &_end;
53 }
54
55 operator std::string() const
56 {
57 return { _data };
58 }
59
60 operator std::string_view() const
61 {
62 return std::string_view{ _data };
63 }
64
65 StringN() = default;
66
67 StringN(const std::string& str)
68 {
69 size_t n = (std::min)(N, str.size());
70 memcpy(_data, str.data(), n);
71 _data[n] = 0;
72 }
73 StringN(const char* str)
74 {
75 size_t n = (std::min)(N, strlen(str));
76 memcpy(_data, str, n);
77 _data[n] = 0;
78 }
79private:
80 char _data[N - 1];
81 mutable char _end;
82};
83
84template<size_t N>
85bool operator==(const StringN<N>& a, std::string_view b)
86{
87 return std::string_view(a) == b;
88}
89}
定长字符串
const char * c_str() const
void Fill(char v)
填充值
StringN(const std::string &str)
StringN(const char *str)
char operator[](std::size_t i) const
StringN()=default
constexpr bool operator==(const Array< T, N > &a, const Array< T, N > &b)