首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >F77/C++混合语言:避免破坏C++实例

F77/C++混合语言:避免破坏C++实例
EN

Stack Overflow用户
提问于 2012-12-11 00:57:47
回答 1查看 167关注 0票数 0

我需要把Fortran和C++混合在一起。我已经写了C++类。多亏了调用C++库的外部"C“函数,我才能够调用C++公共函数。

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

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

你有什么简单的办法把实例保存在内存中吗?

提前谢谢。

EN

回答 1

Stack Overflow用户

回答已采纳

发布于 2012-12-11 01:19:57

如果您想在下次输入相同的函数时再次访问相同的C++对象,可以在函数中将它们声明为static。这将使函数的每次调用共享相同的(静态)变量集。

如果多个函数需要访问相同的对象,您可以在名称空间作用域中定义它们(在任何函数或类之外)。访问对象的函数的所有调用都将共享相同的全局变量。

如果您不希望通过将实例设置为全局或static来隐式共享实例,那么最好的选择(无论如何是最好的选择)是围绕类编写一个C包装器,其中包含动态分配类实例的创建/销毁函数。例如:

代码语言:javascript
复制
// 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();
}
票数 1
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/13805529

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档