我有一个打印整数列表的方法(我的实际方法有点复杂,但它也是只读的):
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::ranges
C++20 中的新功能。我知道您可以按如下方式执行此操作:
auto evenList = vec | std::views::filter([](auto i){ return i % 2 == 0; });
Run Code Online (Sandbox Code Playgroud)
现在我想打电话printElements(evenList)
,但这显然不会编译。解决这个问题的办法是什么?我还可以编写一个函数来打印 astd::vector
和与我的类型相同的对象吗evenList
?或者我需要编写两个单独的函数?
我已经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”)