From 1ddb99fd65bdfcf60d3fd56a3704f115cbd55060 Mon Sep 17 00:00:00 2001 From: nikezono Date: Wed, 26 Apr 2017 11:33:50 +0900 Subject: [PATCH] use variadic templates in oneof_reader --- cmdline.h | 132 +++++------------------------------------------------- 1 file changed, 12 insertions(+), 120 deletions(-) diff --git a/cmdline.h b/cmdline.h index de9eaf7..c5cc5d8 100644 --- a/cmdline.h +++ b/cmdline.h @@ -180,133 +180,25 @@ struct oneof_reader{ std::vector alt; }; -template -oneof_reader oneof(T a1) -{ - oneof_reader ret; - ret.add(a1); - return ret; -} - -template -oneof_reader oneof(T a1, T a2) +template +Reader oneof_impl(Reader& reader, T last) { - oneof_reader ret; - ret.add(a1); - ret.add(a2); - return ret; + reader.add(last); + return reader; } -template -oneof_reader oneof(T a1, T a2, T a3) -{ - oneof_reader ret; - ret.add(a1); - ret.add(a2); - ret.add(a3); - return ret; +template +Reader oneof_impl(Reader& reader, T&& first, Rest&&... rest) { + reader.add(first); + return oneof_impl(reader, rest...); } -template -oneof_reader oneof(T a1, T a2, T a3, T a4) -{ - oneof_reader ret; - ret.add(a1); - ret.add(a2); - ret.add(a3); - ret.add(a4); - return ret; -} - -template -oneof_reader oneof(T a1, T a2, T a3, T a4, T a5) -{ - oneof_reader ret; - ret.add(a1); - ret.add(a2); - ret.add(a3); - ret.add(a4); - ret.add(a5); - return ret; -} - -template -oneof_reader oneof(T a1, T a2, T a3, T a4, T a5, T a6) -{ - oneof_reader ret; - ret.add(a1); - ret.add(a2); - ret.add(a3); - ret.add(a4); - ret.add(a5); - ret.add(a6); - return ret; +template +oneof_reader oneof(Rest&&... rest) { + oneof_reader reader; + return oneof_impl(reader, rest...); } -template -oneof_reader oneof(T a1, T a2, T a3, T a4, T a5, T a6, T a7) -{ - oneof_reader ret; - ret.add(a1); - ret.add(a2); - ret.add(a3); - ret.add(a4); - ret.add(a5); - ret.add(a6); - ret.add(a7); - return ret; -} - -template -oneof_reader oneof(T a1, T a2, T a3, T a4, T a5, T a6, T a7, T a8) -{ - oneof_reader ret; - ret.add(a1); - ret.add(a2); - ret.add(a3); - ret.add(a4); - ret.add(a5); - ret.add(a6); - ret.add(a7); - ret.add(a8); - return ret; -} - -template -oneof_reader oneof(T a1, T a2, T a3, T a4, T a5, T a6, T a7, T a8, T a9) -{ - oneof_reader ret; - ret.add(a1); - ret.add(a2); - ret.add(a3); - ret.add(a4); - ret.add(a5); - ret.add(a6); - ret.add(a7); - ret.add(a8); - ret.add(a9); - return ret; -} - -template -oneof_reader oneof(T a1, T a2, T a3, T a4, T a5, T a6, T a7, T a8, T a9, T a10) -{ - oneof_reader ret; - ret.add(a1); - ret.add(a2); - ret.add(a3); - ret.add(a4); - ret.add(a5); - ret.add(a6); - ret.add(a7); - ret.add(a8); - ret.add(a9); - ret.add(a10); - return ret; -} - -//----- - class parser{ public: parser(){