相关疑难解决方法(0)

从C++到C的值传递的复数似乎不适用于powerpc

当我将复杂的float(complex.h)从c ++调用者传递到ac库时,在32位power pc上运行时,该值无法正确传递.当我发现这个问题时,我正在使用两个不同的开源软件库.我把它分离到C++将复杂值类型传递给纯C类型函数的边界.我写了一些简单的代码来演示它.

#ifndef MMYLIB_3A8726C1_H
#define MMYLIB_3A8726C1_H

typedef struct aComplexStructure {
    float r;
    float i;
} myComplex_t;

#ifdef __cplusplus
#include <complex>
extern "C" {
    void procWithComplex(float a, std::complex<float> *pb, std::complex<float> c, float d);
    void procWithStruct(float a, myComplex_t *pb, myComplex_t c, float d);
}

#else  /* __cplusplus */

#include <complex.h>
void procWithComplex(float a, float complex *pb, float complex c, float d);
void procWithStruct(float a, myComplex_t *pb, myComplex_t c, float d);

#endif

#endif /* MYLIB_3A8726C1_H */
Run Code Online (Sandbox Code Playgroud)

源C文件如下

#include <stdio.h>
#include "myLib.h"

void …
Run Code Online (Sandbox Code Playgroud)

c c++ powerpc pass-by-value complex-numbers

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

C++:使用std :: vectors是否安全,好像它们是数组一样?

我需要一个固定大小的元素数组,并调用它们需要知道它们如何放在内存中的函数,特别是:

  • 这些函数glVertexPointer需要知道顶点的位置,它们彼此之间的距离等等.在我的例子中,顶点将是要存储的元素的成员.

  • 为了得到这个数组中元素的索引,我宁愿避免index在我的元素中有一个字段,而是宁愿使用指针算术(即:Element *x将要的索引x - & array[0]) - 顺便说一句,这对我来说听起来很脏:是这是一种很好的做法还是我应该做些什么?


使用它是否安全std::vector

有些东西让我觉得std::array更合适但是:

  • 我的结构的构造函数和析构函数很少被调用:我不介意这样的开销.

  • 我将把std::vector容量设置为我需要的大小(用于a的大小std::array,因此不会因为零星的重新分配而产生任何开销.

  • 我不介意std::vector内部结构的空间开销.

  • 我可以使用调整向量的大小(或更好:在安装过程中选择一个大小),我认为没有办法用std :: array做这个,因为它的大小是一个模板参数(这太糟糕了:我即使使用旧的类似C的数组,只需在堆上动态分配它就可以做到这一点.


如果std::vector对我的目的没问题,我想了解详细信息,如果它将有一些运行时开销std::array(或一个普通的C数组):

我知道一旦我增加它的大小,它将调用任何元素的默认构造函数(但我想如果我的数据有一个空的默认构造函数,这将不会花费任何费用?),对于析构函数也是如此.还要别的吗?

c++ arrays containers stl vector

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

将大型复杂数组从Python传递到C++ - 我最好的选择是什么?

2017/06/13编辑:我尝试按照建议使用提升,但在花了超过3天试图让它进行编译和链接,并且失败后,我认为愚蠢的痛苦方式可能是最快且不那么痛苦的.. ..所以现在我的代码只是保存了一堆巨大的文本文件(拆分数组和文件中数字的复杂/虚部),然后C++读取.优雅......不......有效......是的.


我有一些科学代码,目前用Python编写,在循环中通过数字3d集成步骤减慢速度.为了克服这个问题,我在C++中重写了这一特定步骤.(Cython等不是一个选项).

简而言之:我希望尽可能方便,轻松地将几个非常大的复数数组从python代码传输到C++集成器.我可以使用文本或二进制文件手动和痛苦地做到这一点 - 但在我开始之前,我想知道我是否有更好的选择?

我正在使用Visual Studio for C++和anaconda for python(不是我的选择!)

是否有任何文件格式或方法可以快速方便地从python中保存一组复数,然后在C++中重新创建它?

非常感谢,本

c++ python arrays visual-c++

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