小编jjc*_*mar的帖子

使用 range-v3 连接不同类型

我想知道是否可以连接两个包含不同类型对象的向量,以便我可以迭代连接并调用通用接口。

像这样的东西:

    std::vector<A> as;
    as.resize(3);

    std::vector<B> bs;
    bs.resize(4);

    for (const auto &v : ranges::views::concat(as, bs))
    {
        foo(v);
    }
Run Code Online (Sandbox Code Playgroud)

您可以在这里找到完整的示例 https://godbolt.org/z/nr5hhWMxj

c++ range-v3

2
推荐指数
1
解决办法
164
查看次数

CMake 无法添加 fPIC 编译选项

我在尝试链接间接使用 Qt5 的可执行文件时遇到一些问题。我已经使用带有选项的 CMake 配置了我的项目CMAKE_POSITION_INDEPENDENT_CODE = ON,但在编译可执行文件时,Qt5 仍然抱怨我应该使用fPIC.

[ 99%] Building CXX object tools/deSimRunner/CMakeFiles/deSimRunner.dir/main.cpp.o
cd /home/jjcasmar/projects/Hybrid/Desilico/prj/Release/tools/deSimRunner && /home/jjcasmar/usr/local/bin/c++  -DBOOST_ALL_DYN_LINK -DFMT_SHARED -DHAVE_CUDA -DQT_CORE_LIB -DQT_GUI_LIB -DQT_NO_DEBUG -DSPDLOG_COMPILED_LIB -DSPDLOG_FMT_EXTERNAL -D_GLIBCXX_USE_CXX11_ABI=1 -I/home/jjcasmar/projects/Hybrid/Desilico/src/deCore -I/home/jjcasmar/projects/Hybrid/Desilico/src/deCore/.. -I/home/jjcasmar/projects/Hybrid/Desilico/src/deGeom/.. -I/opt/cuda/include -I/home/jjcasmar/projects/Hybrid/Desilico/src/deSim/.. -isystem /home/jjcasmar/.conan/data/eigen/3.3.7/conan/stable/package/5ab84d6acfe1f23c4fae0ab88f26e3a396351ac9/include/eigen3 -isystem /home/jjcasmar/.conan/data/rapidjson/1.1.0/bincrafters/stable/package/5ab84d6acfe1f23c4fae0ab88f26e3a396351ac9/include -isystem /home/jjcasmar/.conan/data/boost/1.71.0/conan/stable/package/393cfc058d5be864014f06fc0bb0e29c6845d9e9/include -isystem /home/jjcasmar/.conan/data/zlib/1.2.11/conan/stable/package/1d877a3df840030e6a8abb74c5ffb9088d08b47a/include -isystem /home/jjcasmar/.conan/data/bzip2/1.0.8/conan/stable/package/a5875aed3fc7ae8dd0488f7e5e99acbc480d721d/include -isystem /usr/include/qt -isystem /usr/include/qt/QtCore -isystem /usr/lib/qt/mkspecs/linux-g++ -isystem /home/jjcasmar/.conan/data/spdlog/1.4.2/bincrafters/stable/package/f31849fd5982a882fc905666fe297f0c231b10af/include -isystem /home/jjcasmar/.conan/data/fmt/6.0.0/bincrafters/stable/package/ca4b767114c8e107f72671a3380d9917e2b9adff/include -isystem /home/jjcasmar/.conan/data/OpenMesh/7.1/desilico/stable/package/b80d46004713aa37d6a90b42e2a326a056a237b5/include -isystem /home/jjcasmar/.conan/data/nanoflann/1.3.0/desilico/stable/package/5ab84d6acfe1f23c4fae0ab88f26e3a396351ac9/include -isystem /home/jjcasmar/usr/local/include -isystem /home/jjcasmar/.conan/data/cereal/1.2.2/conan/stable/package/5ab84d6acfe1f23c4fae0ab88f26e3a396351ac9/include -isystem /home/jjcasmar/.conan/data/glm/0.9.9.5/g-truc/stable/package/5ab84d6acfe1f23c4fae0ab88f26e3a396351ac9/include -isystem /usr/include/qt/QtGui -isystem /home/jjcasmar/.conan/data/range-v3/0.9.1/ericniebler/stable/package/5ab84d6acfe1f23c4fae0ab88f26e3a396351ac9/include  -fopenmp  -O3 -DNDEBUG -fPIE   -DNON_COMMERCIAL_LICENSE -std=gnu++14 -o CMakeFiles/deSimRunner.dir/main.cpp.o -c /home/jjcasmar/projects/Hybrid/Desilico/tools/deSimRunner/main.cpp …
Run Code Online (Sandbox Code Playgroud)

qt cmake fpic qt5

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

了解 range-v3 中的 zip 如何工作

我试图了解 range::views::zip 在 range-v3 中如何工作。据我所知,它是一个范围,允许通过创建不同范围中的元素元组来在一个循环中迭代多个范围。

\n\n
std::vector<int> v1 = {0, 1, 2};\nstd::vector<char> v2 = {'a', 'b', 'c'};\n\n\nauto zip = ranges::views::zip(v1,v2);\n// zip(v1,v2) = [(0,a), (1,b), (2,c)]\n\nranges::actions::sort(zip);\nstd::sort(std::begin(zip), std::end(zip));\n
Run Code Online (Sandbox Code Playgroud)\n\n

使用排序ranges::actions工作正常,但std::sort无法编译并给出以下错误

\n\n
/usr/include/c++/9.3.0/bits/stl_algobase.h:151: error: no matching function for call to \xe2\x80\x98swap(concepts::return_t<ranges::common_pair<int&, double&>, void>, concepts::return_t<ranges::common_pair<int&, double&>, void>)\xe2\x80\x99\n  151 |       swap(*__a, *__b);\n      |       ~~~~^~~~~~~~~~~~\n
Run Code Online (Sandbox Code Playgroud)\n\n

为什么会发生这种情况?

\n\n

我还尝试同时删除两个容器中的元素。ranges::actions::unique无法编译并出现以下错误:

\n\n
/home/jjcasmar/projects/cpfsofaplugin/src/CPFSofaPlugin/minimalExample.cpp:27: error: no match for call to \xe2\x80\x98(const ranges::actions::action_closure<ranges::actions::unique_fn>) (ranges::zip_view<ranges::ref_view<std::vector<int, std::allocator<int> > >, ranges::ref_view<std::vector<double, std::allocator<double> > > >&)\xe2\x80\x99\n   27 | …
Run Code Online (Sandbox Code Playgroud)

c++ iterator range-v3

0
推荐指数
1
解决办法
4086
查看次数

使用 CMake 编译带有调试符号的单个文件

我有一个项目,我正在使用 CMake 调试模式使用 gcc 进行编译,以便能够调试一个函数。然而,在我达到这个功能之前,需要花费很多时间。有没有办法只编译一个文件,-g -O0同时编译其余文件-O2

gcc cmake

0
推荐指数
1
解决办法
569
查看次数

switch case 语句后控制到达非 void 函数的末尾

我有一段代码,其中对枚举类的所有值执行 switch case 语句。所有分支都有 return 语句,但 gcc(至少 10.5 和 trunk)仍然认为控件可以到达函数末尾。相同的代码可以在 clang 16 中正常编译。

这是正确的还是 gcc 中的错误?

#include <cassert>

enum class C
{
    A, B
};

int foo()
{
    C c;
    switch (c) {
        case C::A:
          assert(false);
        case C::B:
          return 0;
    }
}
Run Code Online (Sandbox Code Playgroud)

https://godbolt.org/z/v3K6jx5aG

c++ enums switch-statement

0
推荐指数
1
解决办法
114
查看次数

标签 统计

c++ ×3

cmake ×2

range-v3 ×2

enums ×1

fpic ×1

gcc ×1

iterator ×1

qt ×1

qt5 ×1

switch-statement ×1