In message <[EMAIL PROTECTED]>, Terje Slettebų <[EMAIL PROTECTED]> writes >>From: "Pavel Vozenilek" <[EMAIL PROTECTED]> > >> lexical_cast<> constructs and destroys std::stringstream >> (including dynamic memory allocation/free.) >> each time a conversion is done. >> >> Maybe specialised version of lexical_cast<> can be developed >> which takes external, existing stringstream instance as >> template parameter and reuses it. >> >> Very rough idea: >> >> template<typename Target, std::stringstream& ss, typename Source> >> Target lex_cast(Source s) >> { >> // clear ss >> ss << s; >> Target t; >> ss >> t; >> return t; >> } >> >> extern std::stringstream ss; >> std::stringstream ss; >> ... >> int a = 99; >> std::string s = lex_cast<std::string, ss>(a); > >This used to be addressed in the "Future Directions" part of the >lexical_cast documentation, but I see that that section is now removed. >Maybe it should be put back, at least the relevant parts? Kevlin? [...] >Note "anything that involves adding extra arguments for a conversion >operation is not being considered."
And I guess that we could generalise that to "anything that involves adding extra template parameters" :-> Seriously, adding an extra parameter to lexical_cast would offer at best a very limited and odd form of parameterisation. From any reasonable point of view it would seem peculiar that you could parameterise only on a global variable. It feels more like a workaround than a genuinely positive feature -- such a stream could not be local to an object or a thread, for instance. In the early days there was a single stream used, but the threading and re-entrancy issues involved made it a non-starter so it was removed. However, there may be an option in future: I am considering the possibility of creating a lexical_caster class template that could be used to create your own "cast function instances". The motivation for this was more to do with locales, but I suspect that such an object could hold onto its stream rather than treating it as transient. The only issue would be to ensure that the stream was reset every time: s.clear() followed by s.str(), IIRC. Kevlin ____________________________________________________________ Kevlin Henney phone: +44 117 942 2990 mailto:[EMAIL PROTECTED] mobile: +44 7801 073 508 http://www.curbralan.com fax: +44 870 052 2289 Curbralan: Consultancy + Training + Development + Review ____________________________________________________________ _______________________________________________ Unsubscribe & other changes: http://lists.boost.org/mailman/listinfo.cgi/boost