小编pac*_*der的帖子

在cmake中使用包含相邻子项目

我开发了一个由几个共享库组成的项目,并使用CMake构建它.每个库都是通过构建的add_subdirectory().

将第一个库的所有API头添加到第二个库的CMakeLists.txt的最佳方法是什么?

api cmake include subdirectory

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

gdb无法打开共享对象文件

我试图从控制台开始调试我的应用程序.

> gdb ./Geod
Run Code Online (Sandbox Code Playgroud)

然后在gdb中

(gdb) run
Run Code Online (Sandbox Code Playgroud)

我得到了输出:

error while loading shared libraries: libGeo.Cored.so.1: 
cannot open shared object file: No such file or directory
Run Code Online (Sandbox Code Playgroud)

系统配置如下:

> echo $LD_LIBRARY_PATH
    /home/paceholder/projects/geo/lib/debug

> ls $LD_LIBRARY_PATH
    libGeo.Cored.so.1.0.0
    libGeo.Cored.so 
    libGeo.Cored.so.1
    libGeo.Cored.so.1.0


(gdb) show solib-search-path
    The search path for loading non-absolute shared library symbol files is
    /home/paceholder/projects/geo/lib/debug.
Run Code Online (Sandbox Code Playgroud)

linux gdb shared-libraries

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

使用非零值初始化 C 风格数组,无需循环

我们知道 C++ 允许用零初始化 C 风格的数组

int a[5] = {0};
// or
int a[5] = {};
Run Code Online (Sandbox Code Playgroud)

对于 std::array 也同样有效

std::array a<int, 5> = {};
Run Code Online (Sandbox Code Playgroud)

但是,这行不通:

int a[5] = {33}; // in memory( 33, 0, 0, 0, 0 )
std::array<int, 5> = {33}; // in memory( 33, 0, 0, 0, 0 )
Run Code Online (Sandbox Code Playgroud)

vector有没有办法在不使用or 的情况下用非零值初始化整个数组algorhtm

也许constexpr可以帮忙?最好的解决方案是什么?

附:

GCC 提供了这种语法

int a[5] = {[0 ... 4] = 33};
Run Code Online (Sandbox Code Playgroud)

但我不确定它对于其他编译器是否有效。

c++ arrays

5
推荐指数
2
解决办法
7038
查看次数

使用 de Boor 算法的 B 样条导数

维基百科为我们提供了 de Boor 算法的 Python 实现:

def deBoor(k, x, t, c, p):
    """
    Evaluates S(x).

    Args
    ----
    k: index of knot interval that contains x
    x: position
    t: array of knot positions, needs to be padded as described above
    c: array of control points
    p: degree of B-spline
    """
    d = [c[j + k - p] for j in range(0, p+1)]

    for r in range(1, p+1):
        for j in range(p, r-1, -1):
            alpha = (x - t[j+k-p]) / (t[j+1+k-r] - …
Run Code Online (Sandbox Code Playgroud)

python algorithm interpolation bspline

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

C++ 17使用模板参数推导指南继承lambda集

我正在查看http://en.cppreference.com/w/cpp/utility/variant/visit上的文章std::variant

该示例基本上包含以下几行(由我轻轻修改):

template<class... Ts> struct overloaded : Ts... { using Ts::operator()...; };
template<class... Ts> overloaded(Ts...) -> overloaded<Ts...>;

auto a = overloaded {
            [](auto arg) { std::cout << arg << ' '; },
            [](double arg) { std::cout << std::fixed << arg << ' '; },
            [](const std::string& arg) { std::cout << std::quoted(arg) << ' '; },
           };
Run Code Online (Sandbox Code Playgroud)

代码基本上使用列表中的每个lambda函数作为struct的基类overloaded.第一行将lambda operator()引入结构的范围.第二行使用类模板参数推导指南(C++ 17).

我不明白第3行{ }后使用括号overloaded.

这里有什么样的C++机制?我们是否使用初始化列表并将其转换为可变参数模板参数,或者它是一种统一/聚合初始化?是否在这一行中调用了任何实际的构造函数?

有趣的是,如果我使用,施工将失败( ).

c++ lambda multiple-inheritance template-argument-deduction c++17

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

MPI-reduce 运算中的求和顺序

我们知道,不同的浮点数求和顺序会导致不同的结果。

\n\n

考虑使用 MPI_SUM 操作调用的 MPI 函数 MPI_reduce。

\n\n
#include <mpi.h>\nint MPI_Reduce(const void *sendbuf, void *recvbuf, int count,\n               MPI_Datatype datatype, MPI_Op op, int root,\n               MPI_Comm comm)\n
Run Code Online (Sandbox Code Playgroud)\n\n

MPI 标准或 MPI 实现是否保证每次我们使用相同的输入和输出数据运行该函数时,结果都会相同?

\n\n

这就是我在文档中找到的

\n\n
\n

归约的 \xe2\x80\x98\xe2\x80\x98canonical\xe2\x80\x99\xe2\x80\x99 评估顺序由组中进程的排名决定。但是,实现可以利用关联性或关联性和交换性来更改计算顺序。

\n
\n\n

但这并没有提供任何关于可重复性的见解。

\n

c++ parallel-processing hpc mpi

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