【发布时间】:2011-10-07 19:09:04
【问题描述】:
我需要在计算机模拟中混合 C 代码和 C++ 代码。
C 库具有引用常规双精度数组的函数:
void position(double[3])
另一个C库定义了自己的vector类型:
void do_something(*custom_vector)
而我的前端(C++)使用boost::numeric::ublas::vector。
在第一种情况下,我有很多地方都有这种代码:
double tmp[3];
position(tmp)
boostvec r(3);
r(0) = tmp[0]; r(1) = tmp[1]; r(2) = tmp[2];
// continue working with r
还有
custom_vector *v;
do_something(v);
boostvec r(3);
r(0) = v[0]; r(1) = v[1]; r(2) = v[2];
在内部,所有类型最终都是矢量容器,但它们的细微实现差异导致大量样板爆炸。我也在处理很多不同版本的double(一些定义realtype(这是一个双精度),其他定义number(这是一个双精度)等)。
你如何处理这种情况?
谢谢。
【问题讨论】:
-
提供独立的转换函数?
-
@ThomasMatthews:我想到了这个,但我仍然想探索将底层boost数组传递给C函数的可能性(也许这是一个糟糕的想法,但我想我应该问一下; )