语法的数学矢量/矩阵库(附带一些常用函数,随机数生成等) 4.Tencent/rapidjson - 单纯的 JSON 库,甚至没依赖 STL(可定制性高,工程美学经典) 5.ericniebler/range-v3 这些库能够很好地支持作为子模块引入: 1.fmtlib/fmt - 格式化库,提供 std::format 的替代品 2.gabime/spdlog - 能适配控制台,安卓等多后端的日志库 3.ericniebler/range-v3 myexec PUBLIC TBB::tbb TBB::tbbmalloc) 第三方库 - 常用 package 列表: 1.fmt::fmt 2.spdlog::spdlog 3.range-v3::range-v3
returnm_end;}private:typenameContainer::iteratorm_begin;typenameContainer::iteratorm_end;};这类存在于诸如Boost.range或range-v3 如果查看它们的实现代码(这里是boost的实现代码,这里是range-v3的实现代码),会发现它们包含的内容远不止上面的简单包装器,这里只是为了说明要点,而不是用于实际生产代码)。
doctest" GIT_TAG "932a2ca50666138256dae56fbb16db3b1cae133a" ) FetchContent_Declare( Range-v3 GIT_REPOSITORY "https://github.com/ericniebler/range-v3" GIT_TAG "4d6a463bca51bc316f9b565edd94e82388206093 " ) FetchContent_MakeAvailable(DocTest Range-v3) add_executable(${PROJECT_NAME} src/main.cpp) target_link_libraries (${PROJECT_NAME} doctest range-v3) 在 Meson 中使用依赖包 Meson 很强大,并且也提供了自带的包管理支持,但是想要在 Meson 中使用其他包管理器,例如
GLSL 语法的数学矢量/矩阵库(附带一些常用函数,随机数生成等) Tencent/rapidjson - 单纯的 JSON 库,甚至没依赖 STL (可定制性高,工程美学经典) ericniebler/range-v3 这些库能够很好的支持作为子模块引入: fmtlib/fmt - 格式化库,提供 std::format 的替代品 gabime/spdlog - 能适配控制台、安卓等多后端的日志库 ericniebler/range-v3 target_link_libraries(myexec PUBLIC TBB::tbb TBB::tbbmalloc) 第三方库 - 常用 package 列表 fmt::fmt spdlog::spdlog range-v3 ::range-v3 TBB::tbb OpenVDB::openvdb Boost::iostreams Eigen3::Eigen OpenMP::OpenMP_CXX 不同的包之间常常有着依赖关系
Rust comparison 一个性能对比,push style的range,也就是transrange库,和对应的rust实现pushgen,对比普通的循环/range,在不同编译器下的表现,基本上吊锤range-v3 测试时间数据(ms) Test GCC 11.1 transrangers GCC 11.1 Range-v3 Clang 12.0 transrangers Clang 12.0 Range-v3 Rust
这是一个非常棘手的事情,如果你想了解实现方法,那么可以看看range-v3(https://github.com/ericniebler/range-v3),它使用非常先进的技术来模拟这个功能。
随后为大家逐一介绍了Ranges的起源和试图解决的问题,以及Ranges的核心思想及对标准算法的修改,Ranges用到的C++概念,Ranges和惰性求值,并分享了不是范例的范例:range-v3库。
Generically: A Tour of C++ Executors (part 1/2) - Eric Niebler - CppCon 21 execution提案主要作者eric niebler(也是range-v3