構造体へのポインタ配列であるC構造体をカプセル化しようとしていますが、これを行う方法がわかりません。この種のコードは動作しますPerl 6 NativeCall構造体の属性としての構造体の配列
struct foo
{
unsigned char a;
};
struct bar
{
struct foo *f[5];
};
:
はのは、Cのコードは次のようになりましょう
use NativeCall;
class foo is repr('CStruct') {
has uint8 $.a;
}
class bar is repr('CStruct') {
has foo $.f1;
has foo $.f2;
has foo $.f3;
has foo $.f4;
has foo $.f5;
}
が、それはひどいです。
CArray
は、ポインタの配列ではなく、配列へのポインタなので、ここでは使用しません。 has A @.a
のようなものは使用できません。repr('CStruct')
はその種の属性を処理しないためです。
ヒント?
{fooのを持っています@ 'foo'はNativeCallを使った受け入れられた属性型ではないため、正しい構文ではありません。 –
@FernandoSantagataもちろん、それはサポートしていません、Rakudoの配列はC配列(スタックに割り当てられた)とは異なるメモリレイアウトを持っています。私は、メタオブジェクトプロトコルを使用してメタオブジェクトプロトコル(メタオブジェクトプロトコルを使用した属性の自動化、配列のエミュレーションの自動化)を行う方法を見つけたいが、作成または手動操作に関する文書はなく、属性(HASによって宣言されている)メタオブジェクトプロトコルの方法で。多分Rakudoコア開発者に質問メールを送ることができます。 – araraloren