この関数を呼び出そうとしています
bool process(const short* pPCM, size_t num_samples, bool end_of_stream = false);
http://github.com/lastfm/Fingerprinterの Last.FM FingerprintExtractor 開発の fplib 部分から
SWIG (2.0.8) 経由で Ruby (1.9.2) から呼び出そうとしています。
これはこれまでの私のSWIGファイルです
/* */
%define DOCSTRING
"This is a wrapper for The last.fm Fingerprint Extractor library."
%enddef
%module(docstring=DOCSTRING) FingerprintExtractor
%{
#include "../include/fplib/FingerprintExtractor.h"
%}
%include "typemaps.i"
%apply const short *INPUT { const short *pPCM };
%include "../include/fplib/FingerprintExtractor.h"
swig -c++ -ruby FingerprintExtractor.i からの出力
FingerprintExtractor.i:10: Warning 453: Can't apply (short const *INPUT). No typemaps are defined.
私が抱えている問題は、「const」の周りにあると思います。残念ながら、私は C++ と SWIG は初めてです。「const」は変数を強制的に定数にすることを理解しています。これはC ++での良い習慣です。しかし、SWIG でボールをプレーさせる方法がわかりません。メッセージによると、「const short *」宣言のタイプマップを定義する必要がありますが、私の人生ではそれを理解できません。
これを理解するための助けをいただければ幸いです。
http://www.swig.org/Doc1.3/Ruby.htmlの広範なドキュメントを読んだことがありますが、これは悲しいことに私のスキルを超えており、ポインター、配列、定数、typedef、およびタイプマップに関する側面をカバーしていますが、私は持っていませんconstとして宣言されたときに配列へのポインターを渡すことにこれがどのように関連するかを理解できました。「const」の要件を理解するために C++ 言語を確認しました。私は他の実装を見て状況をさらに理解しようとしましたが、もちろんグーグルで検索しました。私が理解できるレベルでは、十分に具体的なものは何もありませんでした。したがって、私の支援のお願いです。