00001
00002
00003
00004
00005
00006
00007
00008
00009
00010
00011
00012
00013
00014
00015
00016
00017
00018
00019 #ifndef _SWORD_BASE_COMMANDLINETRAITS_
00020 #define _SWORD_BASE_COMMANDLINETRAITS_
00021
00022 namespace sword {
00023
00025
00032 template<typename T>
00033 class CommandLineTraits {
00034 public:
00035 static T convert(const std::string &value);
00036 static void toggle(T &value, bool onoff);
00037 };
00038
00039
00040 template<>
00041 class CommandLineTraits<std::string> {
00042 public:
00043 static std::string convert(const std::string &arg) { return arg; }
00044 static void toggle(std::string &, bool ) {}
00045 };
00046
00047
00048 template<>
00049 class CommandLineTraits<int> {
00050 public:
00051 static int convert(const std::string &arg) { return strtol(arg.c_str(), NULL, 0); }
00052 static void toggle(int &, bool ) {}
00053 };
00054
00055
00056 template<>
00057 class CommandLineTraits<bool> {
00058 public:
00059 static bool convert(const std::string &arg)
00060 {
00061 if (arg[0] == 'f' || arg[0] == 'F' || arg[0] == '0') return false;
00062 return true;
00063 }
00064 static void toggle(bool& arg, bool onOff) { arg = onOff; }
00065 };
00066
00067 }
00068
00069 #endif // _SWORD_BASE_COMMANDLINETRAITS_