次回同じ関数に入ったときに同じ C++ オブジェクトに再度アクセスしたい場合は、それらをstatic
関数内で宣言することができます。これにより、関数の各呼び出しが同じ (静的) 変数のセットを共有するようになります。
複数の関数が同じオブジェクトにアクセスする必要がある場合は、名前空間スコープ (関数またはクラスの外側) でそれらを定義できます。オブジェクトにアクセスする関数の呼び出しはすべて、同じグローバル変数を共有します。
インスタンスをグローバルまたはにすることによって暗示されるインスタンスの暗黙的な共有を望まない場合static
、最良のオプション (とにかく最良のオプション) は、インスタンスを動的に割り当てる create/destroy 関数を備えたクラスの周りに 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();
}