00001
00002
00003
00004
00005
00006
00007
00008
00009
00010
00011
00012
00013
00014
00015
00016
00017
00018
00019
00020
00021
00022
00023
00024 #ifndef FORMATABLESTRING_H
00025 #define FORMATABLESTRING_H
00026
00027 #include <string>
00028 #include <sstream>
00029
00030 namespace Aseba
00031 {
00034
00041 class FormatableString : public std::string
00042 {
00043 private:
00047 int argLevel;
00048
00052 void proceedReplace(const std::string &replacement);
00053
00054 public:
00055
00056 FormatableString() : std::string(), argLevel(0) { }
00063 FormatableString(const std::string &s)
00064 : std::string(s), argLevel(0) { }
00065
00074 FormatableString &arg(int value, int fieldWidth = 0, int base = 10, char fillChar = ' ');
00075
00084 FormatableString &arg(unsigned value, int fieldWidth = 0, int base = 10, char fillChar = ' ');
00085
00094 FormatableString &arg(float value, int fieldWidth = 0, int precision = 6, char fillChar = ' ');
00095
00101 template <typename T> FormatableString &arg(const T& value)
00102 {
00103
00104 std::ostringstream oss;
00105 oss << value;
00106
00107 proceedReplace(oss.str());
00108
00109
00110 return *this;
00111 }
00112
00118 FormatableString& operator=(const std::string& str) ;
00119 };
00120
00122 }
00123
00124 #endif // FORMATABLESTRING_H //