小编mat*_*per的帖子

在 C++20 中将 std::ranges::views 作为参数传递

我有一个打印整数列表的方法(我的实际方法有点复杂,但它也是只读的):

void printElements(const std::vector<int> &integersList)
{
    std::for_each(integersList.begin(), integersList.end(), [](const auto& e){
        std::cout << e << "\n";
    });
}
Run Code Online (Sandbox Code Playgroud)

现在假设我有以下向量:

std::vector<int> vec{1,2,3,4,5,6,7,8,9,10};
Run Code Online (Sandbox Code Playgroud)

然后我只想打印偶数。为此,我考虑使用std::rangesC++20 中的新功能。我知道您可以按如下方式执行此操作:

auto evenList = vec | std::views::filter([](auto i){ return i % 2 == 0; });
Run Code Online (Sandbox Code Playgroud)

现在我想打电话printElements(evenList),但这显然不会编译。解决这个问题的办法是什么?我还可以编写一个函数来打印 astd::vector 与我的类型相同的对象吗evenList?或者我需要编写两个单独的函数?

c++ c++20 std-ranges

13
推荐指数
1
解决办法
3163
查看次数

无法使用 CMake 和 vcpkg 找到 Boost 库

我已经boost-variant2使用 vcpkg 命令安装了库:

vcpkg 安装 boost-variant2:x64-windows

vcpkg安装完成后,提示如下:

The package boost is compatible with built-in CMake targets:

    find_package(Boost REQUIRED [COMPONENTS <libs>...])
    target_link_libraries(main PRIVATE Boost::boost Boost::<lib1> Boost::<lib2> ...)
Run Code Online (Sandbox Code Playgroud)

所以在我的 CMakeLists.txt 中我添加了以下几行:

find_package(Boost COMPONENTS variant2 REQUIRED)
target_link_libraries(MyTarget PRIVATE Boost::variant2)
Run Code Online (Sandbox Code Playgroud)

但是,当我运行时,cmake -DCMAKE_TOOLCHAIN_FILE:STRING=/path_to_vcpkg/scripts/buildsystems/vcpkg.cmake出现以下错误:

-- 配置不完整,出现错误!
找不到 Boost(缺少:variant2)(找到版本“1.78.0”)

c++ boost cmake vcpkg

4
推荐指数
1
解决办法
3236
查看次数

标签 统计

c++ ×2

boost ×1

c++20 ×1

cmake ×1

std-ranges ×1

vcpkg ×1