Сначала проверьте, если это has_root_name()
; без него, очевидно, он не определяет объем.
Сложно выяснить, имеет ли only имя root. Это сложно, потому что вы также хотите игнорировать root -каталог пути, если он указывает его.
Диапазон итераторов - это хорошее, дружественное к производительности решение. Если он имеет root -имя, то begin()
указывает на это root -имя. Поэтому, если вы увеличиваете его, он указывает на следующий компонент в пути.
Если путь имеет и root -имя, и root -каталог, то компонент после root - имя является root -каталогом. Таким образом, если вы увеличиваете значение на , итератор либо указывает на дополнительный компонент, либо достигает end
диапазона. И если он находится на end
, то ничего не осталось, и вы знаете, что путь это «просто том».
Код будет выглядеть так:
bool is_volume(const fs::path &p)
{
if(!p.has_root_name()) return false;
auto it = p.begin();
++it; //Skip the root-name
if(p.has_root_directory())
++it; //Skip the root-directory.
if(it == p.end())
return true;
return false;
}