问题获取`boost :: filesystem :: path`字符指针

时间:2019-07-08 14:09:01

标签: c++ visual-c++ boost path boost-filesystem

在以下两行中,第一行给我一个编译时错误,第二行很好:

    std::remove( boost::filesystem::path( mypath / "file.log" ).c_str() );
    std::remove( boost::filesystem::path( mypath / "file.log" ).string().c_str() );

std::remove签名是:int remove( const char* fname );

这是错误消息:

  

“没有重载函数“ std :: remove”的实例与参数列表匹配”

但是boost::filesystem::path::c_str()std::string::c_str()都返回const char*

我正在使用的编译器是Visual C ++ 2013。

1 个答案:

答案 0 :(得分:3)

  

但是boost :: filesystem :: path :: c_str()和std :: string :: c_str()   返回const char *

不,这不是真的。

我们可以打开boost\filesystem\path.hpp源代码,看看那里发生了什么:

  template< typename Char, Char Separator, Char PreferredSeparator, Char Dot >
  struct path_constants
  {
    typedef path_constants< Char, Separator, PreferredSeparator, Dot > path_constants_base;
    typedef Char                                    value_type; // <---
    //...
  };

  class path :
    public filesystem::path_detail::path_constants<
#ifdef BOOST_WINDOWS_API
      wchar_t, L'/', L'\\', L'.'  // [1]
#else
      char, '/', '/', '.'
#endif
    >
  {

并在[1]行中将wchar_t作为第一个参数Char传递到path_constants模板,因此在Windows c_str下返回指向宽字符(2个字节)的指针。