0

以下无害函数无法在 Solaris Studio 12.3 上编译

#undef _RWSTD_NO_MEMBER_TEMPLATES
#include <fstream>
#include <string>
#define _RWSTD_NO_MEMBER_TEMPLATES
std::string FetchData(const std::string& fname)
    {
        std::ifstream fin(fname.c_str());
        std::string data;
        if (fin)
        {
            data = std::string((std::istreambuf_iterator<char>(fin)),
                std::istreambuf_iterator<char>());
        }
        return data;
    }

int main()
{
    return 0;
}

失败并显示错误消息

在 中找不到 std::string::basic_string(std::istreambuf_iterator<char, std::char_traits<char>>, std::istreambuf_iterator<char, std::char_traits<char>>)需要的匹配项OOTest::FetchData(const std::string &)

现在我检查了文件std::string,发现以下内容

#ifndef _RWSTD_NO_MEMBER_TEMPLATES
    template <class _InputIterator>
    basic_string (_InputIterator, _InputIterator, const _Allocator& _RWSTD_DEFAULT_ARG(_Allocator()));

所以我猜,std::string有一个重载声明

template< class InputIt >
basic_string( InputIt first, InputIt last, 
              const Allocator& alloc = Allocator() );

应该匹配的

template< class InputIt >
basic_string( InputIt first, InputIt last, 
              const Allocator& alloc = Allocator() );

但不幸的是它没有。

所以我有两个问题

  1. 为什么我的构造std::istreambuf_iterator<char>不匹配?
  2. 这个宏_RWSTD_NO_MEMBER_TEMPLATES是干什么用的?

笔记

  1. 根据评论,我尝试通过运行生成预处理器输出CC -E test.cpp > pre.out,发现没有生成迭代器版本。所以我尝试取消定义_RWSTD_NO_MEMBER_TEMPLATES,但这没有帮助。

如何使用 htaccess 重写 URL 以获得干净的 url(从 url 中删除不必要的参数)

我正在为 PHP 项目开发本地主机。我需要一些解决方案。

当前网址:http://localhost/project/portfolio/php_files/port_sub_sidebar.php?x=opencart

现在,我想在 URL 中显示如下: http://localhost/project/portfolio/opencart

那怎么可能在.htaccess文件中进行更改

4

0 回答 0