0

我需要将 Fortran 和 C++ 混合在一起。我已经编写了 C++ 类。由于调用 C++ 库的 extern "C" 函数,我能够调用 C++ 公共函数。

此函数创建此 C++ 类的一些实例。当这个函数结束时,我想把这些实例保存在内存中以便之后调用它们。但是销毁我的实例是自动调用的。

我不想将这些实例与 Fortran 一起使用,而是在其他包装的 C++ 函数中使用它们。我不能使用 iso_c_binding 或任何 Fortran 2003 函数(很遗憾)。

您有什么简单的想法可以将实例保存在内存中吗?

提前致谢。

4

1 回答 1

1

如果您想在下次输入相同的函数时再次访问相同的 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();
}
于 2012-12-10T17:19:57.250 回答