[英]Convert std::basic_string<wchar_t> and std::basic_string<uint16_t>
[英]boost::filesystem::path::native() returns std::basic_string<wchar_t> instead of std::basic_string<char>
雖然以下代碼在Linux上編譯,但我無法在Windows上編譯它:
boost::filesystem::path defaultSaveFilePath( base_directory );
defaultSaveFilePath = defaultSaveFilePath / "defaultfile.name";
const std::string s = defaultSaveFilePath.native();
return save(s);
其中base_directory是類的屬性,其類型是std :: string,而函數save只需要一個const std :: string&作為參數。 編譯器抱怨第三行代碼:
對於這個軟件,我使用的是Boost 1.54(對於一些常用庫)和Qt 4.8.4(對於使用這個公共庫的UI),我使用MingW GCC 4.6.2編譯了所有內容。
似乎我的Windows Boost構建由於某種原因返回std :: basic_string。 如果我的評估是正確的,我問你: 我如何使Boost返回std :: string的實例? 順便說一下,有可能嗎?
如果我對問題做了不好的評價,請您提供一些有關如何解決問題的見解。
干杯。
在Windows上,boost :: filesystem根據設計將本機路徑表示為wchar_t
- 請參閱文檔 。 這非常有意義,因為Windows上的路徑可以包含非ASCII Unicode字符。 你無法改變這種行為。
請注意, std::string
只是std::basic_string<char>
,並且所有本機Windows文件函數都可以接受寬字符路徑名(只調用FooW()而不是Foo())。
Boost Path有一個簡單的函數集,可以為您提供“本機”(即便攜式)格式的std :: string。 將make_preferred
與string
結合使用。 這在Boost支持的不同操作系統之間是可移植的,並且還允許您在std::string
。
它看起來像這樣:
std::string str = (boost::filesystem::path("C:/Tools") / "svn" / "svn.exe").make_preferred().string();
或者,修改原始問題的代碼:
boost::filesystem::path defaultSaveFilePath( base_directory );
defaultSaveFilePath = defaultSaveFilePath / "defaultfile.name";
auto p = defaultSaveFilePath.make_preferred(); // convert the path to "preferred" ("native") format.
const std::string s = p.string(); // return the path as an "std::string"
return save(s);
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.