テンプレート関数内で文字や文字列を打ちたいときとかにつかう。どの文字コードも大体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;
};