
Beman Dawes wrote:
On Mon, Oct 27, 2008 at 1:18 PM, Andrey Semashev <andrey.semashev@gmail.com>wrote:
Edward Diener wrote:
Jorge Lodos Vigil wrote:
Hi The Traits classes for basic_path provided in the filesystem library (path_traits and wpath_traits) are good enough to be used as default values for basic_path in most cases. However, since they are independent structs, they can not be used to instantiate a basic_path with a single String template parameter. I would like to write:
typedef basic_string<char> string_t; typedef fs::basic_path<string_t, fs::basic_path_traits<string_t> > path_t; I would like to second this request. I also noticed that one can not easily instantiate a basic_path based completely on a string type, because of the traits class. If it is at all possible, the traits class should be a template class based on the string type, with supplied specializations for std::string and std::wstring. I second that, too. Maybe, a Trac ticket would be a appropriate.
I'm pretty close to posting a Filesystem Version 3 prototype for feedback. Perhaps as soon as this weekend.
It uses a single class path, with templated member functions. Much simpler and more straightforward to use. So the question will become, are these member templates flexible enough to achieve what you are trying to accomplish? It wouldn't be surprising if some further work were needed, and I'll be very interested in getting your comments on the prototype.
The issue for me was just ease of instantiation of a basic_path based solely on a string type ( which is actually a character type ). One can not currently instantiate a basic_path with: boost::filesystem::basic_path<std::basic_string<char>, boost::filesystem::basic_trait<std::basic_string<char> > > myPath; where one just specifies the character type. Why would one want to do that ? For two reasons: 1) In a VC++ program which may be multibyte or Unicode depending on a compiler option, we would have: boost::filesystem::basic_path<std::basic_string<_TCHAR>, boost::filesystem::basic_trait<std::basic_string<_TCHAR> > > myPath; 2) A template class or template function taking a character type parameter would just pass that type in to filesystem to instantiate the correct type path. So I do not know whether your version 3 solves makes that easier or not, but hopefully it does.