0
0

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?

More than 5 years have passed since last update.

ascii_traitsつくった

Posted at

テンプレート関数内で文字や文字列を打ちたいときとかにつかう。どの文字コードも大体0~127はasciiに準じているのでこの範囲では汎用性は狭くないはず。
文字列の扱いももう少しうまいやり方がありそうだけど思いつかなかった。

template<class Char, class Traits>
std::basic_ostream<Char, Traits>& operator<<(
    std::basic_ostream<Char, Traits>& os, my_manip)
{
  // return os << "manip";
  return os
    << ascii_traits<Char>::m << ascii_traits<Char>::a
    << ascii_traits<Char>::n << ascii_traits<Char>::i
    << ascii_traits<Char>::p;
}

頑張って転写した美しさのかけらもない実装。スペルミスがあったらごめんなさい。
記号について自分でつけたい名前があればこのクラスを継承すると楽に作れる。

template<class Char>
struct ascii_traits
{
public:
  using char_type = Char;
  using int_type = typename std::char_traits<char_type>::int_type;
  static constexpr char_type
    // ascii control characters
    // small
    nul = 0, soh = 1, stx = 2, etx = 3,
    eot = 4, enq = 5, ack = 6, bel = 7,
    bs = 8, ht = 9, lf = 10, vt = 11,
    ff = 12, ct = 13, so = 14, si = 15,
    dle = 16, dc1 = 17, dc2 = 18, dc3 = 19,
    dc4 = 20, nak = 21, syn = 22, etb = 23,
    can = 24, em = 25, sub = 26, esc = 27,
    fs = 28, gs = 29, rs = 30, us = 31,

    // captal
    NUL = 0, SOH = 1, STX = 2, ETX = 3,
    EOT = 4, ENQ = 5, ACK = 6, BEL = 7,
    BS = 8, HT = 9, LF = 10, VT = 11,
    FF = 12, CT = 13, SO = 14, SI = 15,
    DLE = 16, DC1 = 17, DC2 = 18, DC3 = 19,
    DC4 = 20, NAK = 21, SYN = 22, ETB = 23,
    CAN = 24, EM = 25, SUB = 26, ESC = 27,
    FS = 28, GS = 29, RS = 30, US = 31,

    // ascii printable characters
    space = 32, exclamation_mark = 33, double_quotes = 34, number = 35,
    dollar = 36, procenttecken = 37, ampersand = 38, single_quote = 39,
    open_bracket = 40, open_parenthesis = open_bracket,
    close_bracket = 41, close_parenthesis = close_bracket,
    asterick = 42, plus = 43, comma = 44, hyphen = 45,
    period = 46, dot = period, full_stop = period,
    slash = 47, divide = slash,
    zero = 48, one = 49, two = 50, three = 51,
    four = 52, five = 53, six = 54, seven = 55,
    eight = 56, nine = 57, colon = 58, semicolon = 59,
    less_than = 60, open_angled_bracket = less_than, equals = 61,
    greater_than = 62, close_angled_bracket = greater_than,
    question_mark = 63, at_symbol = 64,
    A = 65, B = 66, C = 67, D = 68,
    E = 69, F = 70, G = 71, H = 72,
    I = 73, J = 74, K = 75, L = 76,
    M = 77, N = 78, O = 79, P = 80,
    Q = 81, R = 82, S = 83, T = 84,
    U = 85, V = 86, W = 87, X = 88, Y = 89, Z = 90,
    opening_bracket = 91, backslash = 92, closing_bracket = 93,
    caret = 94, circumflex = caret, underscore = 95, grave_accent = 96,
    a = 97, b = 98, c = 99, d = 100,
    e = 101, f = 102, g = 103, h = 104,
    i = 105, j = 106, k = 107, l = 108,
    m = 109, n = 110, o = 111, p = 112,
    q = 113, r = 114, s = 115, t = 116,
    u = 117, v = 118, w = 119, x = 120, y = 121, z = 122,
    opening_brace = 123, virtical_bar = 124, closing_brace = 125,
    equivalency_sign = 126, tilde = equivalency_sign,
    _delete = 127;
};
0
0
0

Register as a new user and use Qiita more conveniently

  1. You get articles that match your needs
  2. You can efficiently read back useful information
  3. You can use dark theme
What you can do with signing up
0
0

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?