问题标签 [c++-experimental]

For questions regarding programming in ECMAScript (JavaScript/JS) and its various dialects/implementations (excluding ActionScript). Note JavaScript is NOT the same as Java! Please include all relevant tags on your question; e.g., [node.js], [jquery], [json], [reactjs], [angular], [ember.js], [vue.js], [typescript], [svelte], etc.

0 投票
2 回答
328 浏览

c++ - 传播常量和前向声明

我刚刚遇到了好奇的 std::experimental::propagate_const 错误。下面的代码片段演示了这个问题

因此,您不能只用传播 unique_ptr 替换 unique_ptr,因为有时您的前向声明会破坏它。

如果有人能向我解释为什么在当前的传播实现中编译失败,我将不胜感激。它与

因为解决方法是:

测试编译器:clang、gcc。

PS我想知道编译器开发人员是否知道。

0 投票
1 回答
1156 浏览

c++ - std::experimental::对于 ndk/clang 是可选的

我正在尝试构建使用std::experimental::optional. 对于 Linux,它编译得很好,但对于 android/ndk,编译器会抛出:

error: no member named 'experimental' in namespace 'std'

我正在使用polly工具链android-ndk-r17-api-24-armeabi-v7a-clang-libcxx14set(CMAKE_CXX_STANDARD 14)

我试图建立一个最小的例子:

但它使用相同的工具链构建得很好。

我很抱歉,我不能在这里发布我的代码。任何想法可能是什么问题?

0 投票
0 回答
707 浏览

c++ - 使用#include 的问题和 MSVC 2017

尽管我在“MSVS 2017”中将项目的语言设置为“ISO C++ 最新草案标准(/std:c++latest)”,但在包含到我的项目时遇到了问题。任何帮助将不胜感激。

值得一提的是,当我使用包括 GCC 和 Clang 在内的其他编译器时,不会发生这种情况。

错误 C1083 无法打开包含文件:'experimental/propagate_const':没有这样的文件或目录

0 投票
2 回答
179 浏览

c++ - 应该 C++ std::future方法命名为 is_ready() 还是 ready()?

为什么实验名称is_ready() 被认为是对 STL 编码风格的增强,std::future而不是ready()更符合 STL 编码风格?Future 已经有一个valid()没有is_前缀的方法被调用。

有趣的是,N3721N3865都包含这两个名称。

0 投票
1 回答
2417 浏览

c++ - 如何使用 std::experimental::simd?

我试着做github std::simd上给出的例子,但我的矢量化版本最终慢了 2-3 倍。如何正确使用?

文档似乎缺乏,没有足够的例子。没有列出构造函数等。我确定我可能以错误的方式使用它,但是由于文档有限,我不知道如何继续。

g++ -o 测试 test.cpp --std=c++2a -O0

0 投票
0 回答
408 浏览

c++ - C++:是否可以将协程对象的指针传递给协程本身内部的另一个函数?

如果我的措辞不清楚,这是代码。

我现在能想到的几个解决方案要么是在生成协程时初始挂起并将指针存储在任意结构中并从该存储的结构中传递,要么在第一次等待时等待可恢复的指针。但我觉得有更清洁的方法可以做到这一点..有吗?

0 投票
0 回答
94 浏览

c++ - 在向公众发布的库中使用 std::experimental 功能是否安全且合法?

假设我正在编写一个针对支持 C++14 的编译器的库。

在 C++14 中,引入了几个标准库工具作为实验性工具,例如optionalfilesystem.

是吗:

  1. 安全(针对下游开发人员)
  2. 合法的

即使仅支持 C++14,我也可以在我的库中使用这些功能?例如在表格中

注意:当然,我的意思是下游开发人员实际上必须自己使用这些功能,而不仅仅是我只在内部使用它们而没有外部暴露的情况。

0 投票
1 回答
290 浏览

c++ - 使用 OpenMP 线程和 std::(experimental::)simd 计算 Mandelbrot 集

我希望使用不同类型的 HPC 范例来实现一个简单的 Mandelbrot 集绘图仪,展示它们的优缺点以及实现的难易程度。想想 GPGPU (CUDA/OpenACC/OpenMP4.5)、线程/OpenMP 和 MPI。并使用这些示例为 HPC 新手提供帮助并了解可能性。代码的清晰性比从硬件中获得绝对顶级性能更重要,这是第二步;)

因为并行化这个问题很简单,而且现代 CPU 可以使用向量指令获得大量性能,所以我还想结合 OpenMP 和 SIMD。不幸的是,简单地添加 a#pragma omp simd并不能产生令人满意的结果,并且使用内在函数不是非常用户友好或未来证明。还是蛮漂亮的。

幸运的是,正在对 C++ 标准进行工作,以便更容易通用地实现向量指令,如 TS: "Extensions for parallelism, version 2"中所述,特别是第 9 节关于数据并行类型。WIP 实现可以在这里找到,它基于 VC,可以在这里找到。

假设我有以下课程(已更改以使其更简单)

以及以下computeMandelbrot()使用 OpenMP的实现

我们可以假设 x 和 y 方向的分辨率都是 2/4/8/.. 的倍数,具体取决于我们使用的 SIMD 指令。

不幸的是,在std::experimental::simd. 据我所知,也没有任何重要的例子。

在 Vc git 存储库中,有一个 Mandelbrot 集合计算器的实现,但它非常复杂,并且由于缺少注释而很难理解。

很明显,我应该更改函数中双精度数的数据类型computeMandelbrot(),但我不确定是什么。TS 提到了某些类型 T 的两个主要新数据类型,

native_simd = std::experimental::simd<T, std::experimental::simd_abi::native>;

fixed_size_simd = std::experimental::simd<T, std::experimental::simd_abi::fixed_size<N>>;

使用native_simd是最有意义的,因为我在编译时不知道我的界限。但是我不清楚这些类型代表什么,是native_simd<double>单个双精度数还是执行向量指令的双精度数集合?那么这个系列中有多少双打?

如果有人可以指出使用这些概念的示例,或者给我一些关于如何使用 std::experimental::simd 实现矢量指令的指示,我将非常感激。

0 投票
1 回答
534 浏览

c++ - 如何将 STD::filesystem::recursive_directory_iterator 与相对路径一起使用?

我正在尝试在文件系统中使用 recursive_directory_iterator,但我收到一条错误消息。我的 main.cpp 文件在“A/main.cpp”文件中,但我想访问“B/”中的一堆 .txt 文件。A & B 文件夹都位于同一级目录中。所以,我假设从 A 到 B 的相对路径是:“./B/”或“../B/”</p>

这是我的代码:

但是,在尝试两者时出现以下错误:

libc++abi.dylib:以 std::__1::__fs::filesystem::filesystem_error 类型的未捕获异常终止:文件系统错误:在 recursive_directory_iterator 中:没有这样的文件或目录 [../B]

这是我的编译器版本:

0 投票
1 回答
212 浏览

c++ - 能和分别可用于 Windows 和 Linux?

我正在寻找一种处理目录和文件的跨平台(没什么奇怪的,标准的 Linux 和 Windows 桌面安装)方式(例如:列出目录的内容,检查路径是否是文件或目录等)。我不想使用任何boostQt

因此,经过一些研究,我发现了<filesystem>标题。由于我使用 C++14,我检查并发现了预标准实现(该filesystem功能成为 C++17 的 C++ 标准的一部分)可以找到(或至少到目前为止我使用的部分)为<experimental/filesystem>.

我在 Windows 和 Visual C++ 方面的知识相当缺乏,所以我的问题是这是否也适用于它,还是仅适用于 GCC 和 Clang(我迄今为止尝试过的那些)?我知道在使用时cmake我需要在链接时区分 Clang 和 GCC(另请参阅3 年前的这个错误报告):

在这种情况下,我不知道如何处理 Visual C++。鉴于 C++ 的特定标准,我的项目需要尽可能可移植。


注意:我不想使用 C++17,但如果有人在启用该标准的情况下构建它,我想在我的代码中添加对它的支持的可能性。这就是区分 C++14 和 C++17 很重要的原因。