For the changing of the std::string allocator, I retypedef the std::string to my string, just like this:
namespace MyNamespace
{
   template<typename Elem, typename Traits>
    class basic_string : public std::basic_string<Elem, Traits, STLAllocator<Elem> >
    {
        // reimplement the typedefs and constructors.
    };
 
    typedef basic_string<char, std::char_traits<char> > string;
    typedef basic_string<wchar_t, std::char_traits<wchar_t> > wstring;
}
So I want the boost::filesystem use my own string type, but I met some problem:
The code like this:
namespace MyNamespace
{
    struct path_traits;
    typedef boost::filesystem::basic_path<string, path_traits> path;
    typedef boost::filesystem::basic_path<wstring, path_traits> wpath;
    struct path_traits
    {
        typedef string internal_string_type;
        typedef string external_string_type;
        static external_string_type to_external( const path &,
            const internal_string_type & src ) { return src; }
        static internal_string_type to_internal(
            const external_string_type & src ) { return src; }
    };
    typedef boost::filesystem::basic_recursive_directory_iterator<path> recursive_directory_iterator;
    typedef boost::filesystem::basic_recursive_directory_iterator<wpath> wrecursive_directory_iterator;
}
 
namespace boost
{
namespace filesystem
{
    template<> struct is_basic_path<MyNamespace::path>
      { BOOST_STATIC_CONSTANT( bool, value = true ); };
    template<> struct is_basic_path<MyNamespace::wpath>
      { BOOST_STATIC_CONSTANT( bool, value = true ); };
}
}
 
namespace MyNamespace
{
    inline bool is_directory( const path & ph )
      { return boost::filesystem::is_directory<path>( ph ); }
    inline bool is_directory( const wpath & ph )
      { return boost::filesystem::is_directory<wpath>( ph ); }
}
For replace all the function is a huge work, and in this way I can not replace it for I met this function:
BOOST_FILESYSTEM_DECL file_status
        status_api( const std::string & ph, system::error_code & ec );
 
Maybe this way is too bother, I think there must be an easy way to replace the string.
Is there any way to resolve this? Thank you.