我需要把Fortran和C++混合在一起。我已经写了C++类。多亏了调用C++库的外部"C“函数,我才能够调用C++公共函数。
此函数用于创建此C++类的一些实例。当此函数结束时,我希望将这些实例保留在内存中,以便在之后调用它们。但是销毁我的实例是自动调用的。
我不想在Fortran中使用这些实例,而是在其他包装的C++函数中使用它们。我不能使用iso_c_binding或任何Fortran2003函数(很遗憾)。
你有什么简单的办法把实例保存在内存中吗?
提前谢谢。
发布于 2012-12-11 01:19:57
如果您想在下次输入相同的函数时再次访问相同的C++对象,可以在函数中将它们声明为static。这将使函数的每次调用共享相同的(静态)变量集。
如果多个函数需要访问相同的对象,您可以在名称空间作用域中定义它们(在任何函数或类之外)。访问对象的函数的所有调用都将共享相同的全局变量。
如果您不希望通过将实例设置为全局或static来隐式共享实例,那么最好的选择(无论如何是最好的选择)是围绕类编写一个C包装器,其中包含动态分配类实例的创建/销毁函数。例如:
// x.hpp
class X {
public:
X(int);
void foo();
};
// x_wrapper.h
extern "C" {
void* create_x(int arg);
void destroy_x(void* anX);
void x_foo(void* anX);
}
// x_wrapper.cpp
#include "x.hpp"
#include "x_wrapper.h"
void* create_x(int arg) {
return new X(arg);
}
void destroy_x(void* anX) {
X* self = (X*)anX;
delete self;
}
void x_foo(void* anX) {
X* self = (X*)anX;
return self->foo();
}https://stackoverflow.com/questions/13805529
复制相似问题