c_cpp 使用文件系统库的一个技巧就好像有一个标准的C ++ 17。

Posted

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了c_cpp 使用文件系统库的一个技巧就好像有一个标准的C ++ 17。相关的知识,希望对你有一定的参考价值。

#pragma once

// Use the filesystem library as if there is a standard one of C++17.

// Filesystem library
// http://en.cppreference.com/w/cpp/filesystem

#if _MSC_VER >= 1700 // VS2012

// Use the one from 'std::tr2' to avoid depending on Boost DLLs.

// <filesystem>
// http://msdn.microsoft.com/library/hh874694

#include <filesystem>
#include <string>

// Note that 'std::tr2::sys::path' always translates the path into the general format (POSIX, forward-slash).
// To get a native format (Windows, backslash) path we preferred, define our own 'path' class
// based on the existing 'std::tr2::sys::basic_path' template, and provide proper slash/altslash traits.

// Class path: Generic format vs. Native format
// http://www.boost.org/doc/libs/1_57_0/libs/filesystem/doc/tutorial.html#class-path-formats

// On Windows platform, 'boost::filesystem::path' gives paths with backslash natively.

namespace std
{
    namespace filesystem
    {
        struct path_traits : public tr2::sys::path_traits
        {};

        typedef tr2::sys::basic_path<string, path_traits> path;

        using namespace tr2::sys;
    }

    namespace tr2
    {
        namespace sys
        {
            template <> struct colon<filesystem::path>
            {
                static const char value = ':';
            };
            template <> struct dot<filesystem::path>
            {
                static const char value = '.';
            };
            template <> struct slash<filesystem::path>
            {
                static const char value = '\\';
            };
            template <> struct _Altslash<filesystem::path>
            {
                static const char value = '/';
            };
        }
    }
}

inline std::filesystem::path operator /(const std::filesystem::path &a, const std::string &b)
{
    return a / std::filesystem::path(b);
}

#else

// For Visual Studio older than 2012, Boost libraries are required.

// Filesystem Library Reference Documentation
// http://www.boost.org/doc/libs/1_57_0/libs/filesystem/doc/reference.html

#include <boost/filesystem.hpp>

namespace std
{
    namespace filesystem
    {
        using namespace boost::filesystem;
    }
}

#endif

以上是关于c_cpp 使用文件系统库的一个技巧就好像有一个标准的C ++ 17。的主要内容,如果未能解决你的问题,请参考以下文章

HAL和标准库的Assert断言机制

HAL和标准库的Assert断言机制

Scrapy爬虫库的使用技巧

gcc 编译使用动态链接库和静态链接库

c_cpp 使用boost库的cpp程序的参数解析器。

Visual Studio中怎么生成动态链接库的lib文件