2017-03-13 10 views
0

私は関数のアドレスとその "cのような"表現(llvmliteからですが、これはそれほど重要ではありません)を持っています。 2つのdouble値を加算し、コードは次のようになり、それらを返す関数については、Ctypes:C定義からのデータ型

cfunc = CFUNCTYPE(c_double, c_double, c_double)(func_ptr)

非常にうまく機能するであろう、しかし私の関数の引数はタイプと番号を変えることができます。 Pythonでは、これはいくつかのfor arg in argsジェネレータで解くことができます。

しかし、私はツールを持っていません(少なくとも私はどれも "見つけられませんでした")。どのように "変換"するか、私の型をctypeのものに解析します。

引数はllvmlite-Typeのオブジェクトなので、私はcのような型表現を利用できます。


私のアプローチは、のctypesのタイプオブジェクトにllvmlite型オブジェクト、またはc-表現をマッピングすることができる辞書を作成することであろう。小さなパーサーも助けてくれるかもしれません。

ctypeにはすでにこのようなものはありませんか?魔法の機能: ctypes.magic("double") == ctypes.c_double

私はctypesに縛られていません。私はCFFIが存在することを知っていますが、私は0の経験を持っており、私がドキュメントを見る限り、私は単一の関数アドレスのための基本的な解を見つけることさえできませんでした。

私のユースケースはかなり珍しいことです。これらのライブラリの両方がライブラリに関心があり、特定の関数のアドレスではないからです。

答えて

0

[OK]を、私はちょうどすべての可能性とdictを使用しています。私はおそらくllvmliteにのみバインドされるので、その多くのオプションはありません。 {str(ir.DoubleType()): ct.c_double, ....}

関連する問題