2013-01-08 61 views
0

问题1:我想先删除boost::filesyetem::path中的“file://”部分,而不先转换为std::string。是否可以使用boost::algorithm::replace_first算法来编写此代码?在boost :: filesystem :: path中使用boost :: algorithm

我试过以下,但它不能编译。

std::string s("file://"), empty(""); 
boost::filesystem::path path = oldPath.generic_string(); 
boost::algorithm::replace_first(path.generic_string(), s, empty); 

编译错误:

cannot convert parameter 2 from 'std::_String_const_iterator<std::_String_val<std::_Simple_types<char>>>' to 'std::_String_iterator<std::_String_val<std::_Simple_types<char>>>'  

问题2:boost::algorithm总比其他当应用于字符串有什么用?

回答

1

A boost::filesystem::path而不是字符数组。您无法遍历path中的字符,也不能假定所包含的字符串是任何特定的编码。将path存储为std::vector<SomeStringType>是完全合法的,其中向量的每个元素都是路径的元素。

简而言之,path不是字符容器;这是一个特殊的对象。如果您需要存储在字符容器中的路径信息,则需要将其转换为这样的容器。

+0

谢谢@NicolBolas。它非常有意义。你能回答问题的第二部分吗? – hhbilly

+0

@ user1626720:这个问题定义得太差,无法回答。算法对于你使用它们的任何东西都很有用。然而,顾名思义,[*字符串算法*(这是'replace_first'的来源]](http://www.boost.org/doc/libs/1_52_0/doc/html/string_algo.html)主要用于字符串。 '路径'不是字符串。 –

相关问题