Opened 11 years ago
Last modified 5 years ago
#6521 assigned Feature Requests
Directory listing using C++11 range-based for loops
| Reported by: | Owned by: | Beman Dawes | |
|---|---|---|---|
| Milestone: | To Be Determined | Component: | filesystem |
| Version: | Boost 1.48.0 | Severity: | Cosmetic |
| Keywords: | Cc: |
Description
I have written a simple 'container' class for a directory, 'containing' all of its subdirectories:
namespace boost{
namespace filesystem{
class directory{
path p_;
public:
inline directory(path p):p_(p){
return;
}
directory_iterator begin(){
return directory_iterator(p_);
}
directory_iterator end(){
return directory_iterator();
}
};
}
}
so that that range-based for loop can be used:
for(auto i:directory("/home")){
...
}
Change History (3)
comment:1 by , 11 years ago
| Status: | new → assigned |
|---|
comment:2 by , 10 years ago
I have read the mailing list. I think all filtering should be moved to the directory iterators and that the helper functions should only be used for passing parameters to the iterator constructor like this:
template<class... argts>
boost::iterator_range<directory_iterator>
directory_range(argts... args){
return boost::iterator_range<directory_iterator>(
directory_iterator(args...),
directory_iterator()
);
}
template<class... argts>
boost::iterator_range<recursive_directory_iterator>
recursive_directory_range(argts... args){
return boost::iterator_range<recursive_directory_iterator(
recursive_directory_iterator(args...),
recursive_directory_iterator()
);
}
comment:3 by , 5 years ago
Note that because directory_iterator supports begin()/end(), one can already use range-for loops like this:
for( const auto& dir_ent : directory_iterator{ "my/path/to/iterate" } ) { cout << dir_ent.path() << '\n'; }
Note:
See TracTickets
for help on using tickets.

A message has been posted to the Boost developers mailing list asking for comments on your proposal.
Thanks for raising the issue,
--Beman