boost 相关问题

Boost是一系列旨在用于C ++的高质量库。 Boost是免费的,通常被认为是“第二标准库”。

我可以独立使用 boost::asio::io_context 来独立使用不同时间间隔的不同方法吗?

我正在尝试实现一个 C++ 代码,该代码应该以不同的时间间隔调用三个彼此独立的不同方法。 例如,假设 method_1 应该被称为 e...

回答 1 投票 0

为 Boost C++ 启用 OpenSSL FIPS 模式

问题 浏览这些不同的 OpenSSL 3.0 文档 https://security.stackexchange.com/questions/34791/openssl-vs-fips-enabled-openssl https://github.com/openssl/openssl/blob/master/README-FIPS.md

回答 1 投票 0

boost asio 日期时间服务器示例和使用 std::async 不起作用

我正在尝试学习boost asio(boost 1.84,C ++ 20,Ubuntu 23.04),并对以下日间服务器示例进行了一些修改:https://www.boost.org/doc/libs/1_84_0 /doc/html/boost_asio/

回答 1 投票 0

多个线程使用相同的io_context以不同的时间间隔调用方法是否安全?

我有一个应用程序,我需要通过不同的线程在单个方法内调用多个方法。 每个方法应该以不同的时间间隔调用。 我正在使用增强功能

回答 1 投票 0

react 本机运行 ios 卡在隐式依赖上

最初,由于无法从 pod install 安装 boost 包,所以没有运行任何内容,但我解决了这个问题并成功安装了 React Native 的 boost。 现在,当我尝试...

回答 1 投票 0

使用 Boost Spirit 查找字符串中的孤立单词

我是个新手,也许这甚至是很容易得到的东西。 但是,编写 boost::spirit 解析器的最佳方法是什么?该解析器允许您仅在单词是孤立的情况下才匹配字符串中的单词? 示例...

回答 1 投票 0

boost::span 能与 boost::begin 一起正常工作吗?

我正在使用 Boost 1.78,并且我正在尝试使用它的 std::span 实现。虽然 Span 实现似乎很好,但当我在 Span 上调用 boost::begin() 时,如果该 Span 是右值,则它会返回...

回答 1 投票 0

如何修复成员运算符 boost 词法解析器的错误 ->*

感谢任何帮助。我正在编写一个解析器,它可以与 GCC 4.9.3 + Boost 1_55 及更早版本一起使用,但不能与 Boost(或 GCC)的更高版本一起使用。 错误是: 错误:与“operator->”不匹配(操作数 t...

回答 1 投票 0

boost 子图给出“形成对 void 的引用”错误

我正在尝试创建 boost::adjacency_list 的 boost::subgraph,但我在创建时遇到了一个我不明白的错误。专门使用 boost::adjacency_list 构建的类似代码和

回答 1 投票 0

Boost Graph 库中的 read_graphml 函数遇到困难

我正在尝试使用 Boost 库中的 read_graphml 函数来读取我正在开发的 C++ 应用程序中的一些 .graphml 文件。然而,我在阅读中遇到了意想不到的困难...

回答 1 投票 0

如何在 qmake 项目中使用 Boost 库?

前几天我编译了Boost版本。 VS2012 为 1.53.0。它工作正常,编译良好。现在我想将 Boost 与 Qt Creator 一起使用。在我包含的 .pro 文件中 INCLUDEPATH += C: oost oost_1_53_0\ -

回答 2 投票 0

boost::基于多索引范围的复合键

我正在尝试在多索引容器上执行复合范围查询,但遇到了一些问题。我们举个最简单的例子: // 这是我的对象 结构体 Obj { 整数一; 整数二; 整数

回答 1 投票 0

C++ 中文件句柄请求的 Boost.MySQL 问题

我正在使用 Boost.MySQL 和 boost 版本 1.84。我想使用连接,因此我创建了一个类并添加了一个连接成员变量。我从 MySQL 服务器获取连接并保存

回答 1 投票 0

从1.69升级到1.82后Boost日志链接失败

我有 boost 1.69,工作正常,我已将版本升级到 1.82,并且没有更改任何记录器设置或配置。 记录器现在无法与可执行文件链接。 我正在使用博...

回答 1 投票 0

有没有更好的方法来检查boost共享内存段是否存在?

我能看到如何做到这一点的唯一方法是尝试访问它并捕获抛出的异常(如果它不存在)。 布尔值存在() { 使用命名空间 boost::interprocess; 尝试 { ...

回答 3 投票 0

使用 CMake 将多个测试源文件编译为单个合并文件

我有一个库,其中有许多不同的 cpp 测试文件。 它们看起来像这样,A.cpp、B.cpp、C.pp 等。 A.cpp: #define BOOST_TEST_MODULE "C++ 单元测试 A" #包括 我有一个包含许多不同 cpp 测试文件的库。 它们看起来像这样,A.cpp、B.cpp、C.pp等等 A.cpp: #define BOOST_TEST_MODULE "C++ Unit Tests A" #include<boost/test/unit_test.hpp> #include <multi/array.hpp> BOOST_AUTO_TEST_CASE(test_case_A1) { ... } B.cpp: #define BOOST_TEST_MODULE "C++ Unit Tests B" #include<boost/test/unit_test.hpp> #include <multi/array.hpp> BOOST_AUTO_TEST_CASE(test_case_B1) { ... } 我有以下 Cmake 代码要编译和测试 include(CTest) file( GLOB TEST_SRCS RELATIVE ${CMAKE_CURRENT_SOURCE_DIR} *.cpp ) foreach(TEST_FILE ${TEST_SRCS}) set(TEST_EXE "${TEST_FILE}.x") add_executable(${TEST_EXE} ${TEST_FILE}) target_link_libraries(${TEST_EXE} PRIVATE multi) target_include_directories(${TEST_EXE} PRIVATE ${PROJECT_SOURCE_DIR}/include) target_include_directories(${TEST_EXE} SYSTEM PRIVATE ${Boost_INCLUDE_DIRS} ) target_link_libraries (${TEST_EXE} PRIVATE Boost::unit_test_framework ) endforeach() 这样做的问题是每个测试都需要一些时间来编译。 我知道如果我合并所有这些 cpp 文件,总体编译速度会更快。 (例如,我有 40 个 cpp 测试文件,每个需要 10 秒,总编译时间为 400 秒。如果我合并所有文件,可能需要 20 秒。即使我可以并行化单个文件的构建,也很难实现 20 倍的因子.显然编译器做了很多重复的工作。据说 gch 预编译头会有所帮助,但我从来没有弄清楚如何在 cmake 中使用它们)。 有没有办法强制这些测试的编译在单个合并文件上工作? 我尝试用这个替换循环: add_executable(multi_test ${TEST_SRCS}) add_test(NAME multi_test COMMAND ./multi_test) target_include_directories(multi_test PRIVATE ${PROJECT_SOURCE_DIR}/include) target_include_directories(multi_test SYSTEM PRIVATE ${Boost_INCLUDE_DIRS} ) target_link_libraries (multi_test PRIVATE Boost::unit_test_framework ) 但是,它仍然存在两个问题: 首先,编译仍然很慢,因为每个 cpp 都用于生成单独的 .o 文件(稍后链接到相同的可执行文件)。 第二个问题是每个 .o 将包含一个 main 函数(由 Boost.Test 定义),因此会出现链接器错误。 我可以进行更改来编译多个 cpp 文件,就好像它是单个 cpp 文件一样吗? (我想避免手动生成临时合并文件) 有 Boost.Test 标志可以帮助我解决这个问题吗? 我想要一个解决方案,其中每个测试源文件仍然可以编译成自己的可执行文件。 作为示例,我能够执行此过程来获取单个文件。 echo '#define BOOST_TEST_MODULE "C++ Unit Tests for Multi, All in one"' > ../test/all.cpp # Boost Test need a module name cat ../test/*.cpp | grep -v BOOST_TEST_MODULE >> ../test/all.cpp # filter macros to avoid warnings 您可以通过 #define BOOST_TEST_MODULE "C++ Unit Tests <...>" 命令执行target_compile_definitions操作,这在这里很有用,因为您想为用户提供是否对单个可执行文件或单个可执行文件一起构建测试的选项。 这样做的问题是每个测试都需要一些时间来编译。我知道如果我合并所有这些 cpp 文件,总体编译速度会快得多。 [...] 据说 gch 预编译标头会有所帮助,但我从未弄清楚如何将它们与 CMake 一起使用)。 有关在 CMake 中使用预编译头的信息,请参阅 target_precompile_headers 命令。但是,您正在寻找的连接源文件进行编译的方法,就好像它们是单个源文件一样,并且有一个名称:“Unity Build”。 CMake 甚至还提供了支持它的功能:其UNITY_BUILD目标属性。请阅读文档并了解建议如何正确使用它,以及在将统一构建技术与任何构建工具一起使用时可能出现的 ODR 违规的一般注意事项。 解决方案可能看起来像这样(用引号引起来,因为它主要取自您的问题帖子和您在聊天中写的内容): include(CTest) file( GLOB TEST_SRCS RELATIVE ${CMAKE_CURRENT_SOURCE_DIR} *.cpp ) option( TEST_UNITY_BUILD "whether to create a single executable for all tests (instead of one per test source file)" <default> # replace <default> with desired default value ) if("${TEST_UNITY_BUILD}") foreach(TEST_FILE ${TEST_SRCS}) set(TEST_EXE "${TEST_FILE}.x") add_executable(${TEST_EXE} ${TEST_FILE}) target_link_libraries(${TEST_EXE} PRIVATE multi) target_include_directories(${TEST_EXE} PRIVATE ${PROJECT_SOURCE_DIR}/include) target_include_directories(${TEST_EXE} SYSTEM PRIVATE ${Boost_INCLUDE_DIRS} ) target_link_libraries (${TEST_EXE} PRIVATE Boost::unit_test_framework ) target_compile_definitions(${TEST_EXE} PRIVATE BOOST_TEST_MODULE="C++ Unit Tests for ${TEST_FILE}") endforeach() else() add_executable(multi_test ${TEST_SRCS}) set_property(TARGET multi_test PROPERTY UNITY_BUILD ON) target_include_directories(multi_test PRIVATE ${PROJECT_SOURCE_DIR}/include) target_include_directories(multi_test SYSTEM PRIVATE ${Boost_INCLUDE_DIRS} ) target_link_libraries (multi_test PRIVATE Boost::unit_test_framework ) target_compile_definitions(multi_test PRIVATE BOOST_TEST_MODULE="C++ Unit Tests for Multi GLOBAL TEST") add_test(NAME multi_test COMMAND ./multi_test) endif() 请注意,CMake 的维护者以及 Stack Overflow 上的各种 CMake 长期用户不鼓励使用 file(GLOB),如此处和此处所示。您可以手动定义文件列表,如 set(TEST_SRCS A.cpp B.cpp C.cpp ...)。 另请注意,如果您使用 file(GLOB),则对于 CMake v3.6 之前的版本,结果变量中的顺序文件未指定,而对于 3.6 及更高版本,则指定为字典顺序。 (参见 file(GLOB) 文档),它与 CMake 的统一构建功能相关。引用自UNITY_BUILD文档: 通过 add_library()、add_executable() 或 target_sources() 等命令添加到目标的源文件的顺序将保留在生成的 Unity 源文件中。这可用于根据 UNITY_BUILD_BATCH_SIZE 目标属性手动强制执行特定分组。 您可能还对 create_test_sourcelist 感兴趣,它将许多测试链接到一个可执行文件中。

回答 1 投票 0

包括使用 Visual Studio Code 在 Windows 上进行 C++ Boost

我想在 Visual Studio Code 中包含并使用 boost 库 (https://www.boost.org/)。这是我的测试.cpp: 在 VS Code 中运行代码后出现错误,箭头位于右上角

回答 1 投票 0

在 mac os x 中未找到 boost 标头问题

虽然包含 boost 标头,但我收到如下未找到错误 - 致命错误:boost/config.hpp:没有这样的文件或目录 #包括 我使用的是 Mac OS X 10...

回答 4 投票 0

使用Boost计算百分位(P50、P95)

我正在尝试计算 P50 和 P95 以用于整数流列表。这是一个示例代码:Live On Compiler Explorer #包括 #包括 我正在尝试计算 P50 和 P95 以用于整数流列表。这是示例代码:Live On Compiler Explorer #include <boost/accumulators/accumulators.hpp> #include <boost/accumulators/statistics.hpp> #include <boost/accumulators/statistics/extended_p_square_quantile.hpp> namespace ba = boost::accumulators; int main() { std::vector<int> values = {1, 2, 3, 4, 5, 6, 7, 8, 9, 10}; std::vector<double> probs = {0.5, 0.95}; ba::accumulator_set<int, ba::stats<ba::tag::extended_p_square_quantile>> // acc(ba::extended_p_square_probabilities = probs); for (auto val : values) { acc(val); } std::cout << "P: " << ba::quantile(acc, ba::quantile_probability = 0.5) << " " << ba::quantile(acc, ba::quantile_probability = 0.95) << std::endl; } 但这返回了意想不到的值: P: 3 7 我预计答案是5 9。我怎样才能得到我想要的东西? 统计数据为估计值。您不仅应该期望不同的值。也许 95% 的百分位数估计应该更接近 10。 您可以通过测试程序的扩展来看到它的工作原理: 住在Coliru #include <boost/accumulators/accumulators.hpp> #include <boost/accumulators/statistics.hpp> #include <boost/accumulators/statistics/extended_p_square_quantile.hpp> namespace ba = boost::accumulators; namespace tag = ba::tag; template <typename... T> using Accum = ba::accumulator_set<int, ba::stats<T...>>; template <typename... T> Accum<T...> make() { std::vector<double> probs = {0.5, 0.95}; // unused arguments are ignored return Accum<T...>(ba::extended_p_square_probabilities = probs, tag::p_square_cumulative_distribution::num_cells = 11); } int main() { std::vector<int> values = {1, 2, 3, 4, 5, 6, 7, 8, 9, 10}; auto simple = make<tag::median>(); auto p_sq_est = make<tag::with_p_square_cumulative_distribution_median>(); auto acc = make<tag::extended_p_square_quantile_quadratic>(); for (int i = 0; i < 100; ++i) { for (auto val : values) { simple(val); p_sq_est(val); acc(val); } printf("P: %6.3f %6.3f simple: %6.3f p_sq_est: %6.3f\n", // ba::quantile(acc, ba::quantile_probability = 0.50), // ba::quantile(acc, ba::quantile_probability = 0.95), // ba::median(simple), ba::median(p_sq_est)); } } 印刷: P: 3.000 7.000 simple: 5.000 p_sq_est: 6.000 P: 5.500 9.000 simple: 5.231 p_sq_est: 6.281 P: 5.286 9.433 simple: 5.448 p_sq_est: 6.004 P: 5.460 9.688 simple: 5.346 p_sq_est: 6.136 P: 5.396 9.835 simple: 5.285 p_sq_est: 6.184 P: 5.353 9.835 simple: 5.240 p_sq_est: 6.201 P: 5.321 9.910 simple: 5.204 p_sq_est: 6.166 P: 5.297 9.951 simple: 5.175 p_sq_est: 6.263 // ... P: 5.130 10.000 simple: 5.011 p_sq_est: 6.523 P: 5.129 10.000 simple: 5.011 p_sq_est: 6.511 P: 5.129 10.000 simple: 5.011 p_sq_est: 6.511 P: 5.129 10.000 simple: 5.011 p_sq_est: 6.517 P: 5.129 10.000 simple: 5.011 p_sq_est: 6.511

回答 1 投票 0

使用 boostspirit 识别带双括号的令牌字符串时遇到问题

解析字符串时: 1815 ((sd-pam)) S 1778 1778 1778 ... 我试图省略“((sd-pam))”标记 我使用了以下内容: omit_string %= lexeme['(' >> +(char_ - ')') >> '...

回答 1 投票 0

© www.soinside.com 2019 - 2024. All rights reserved.