2

C++ライブラリでSWIG2.0.4を使用しようとしていますが、.iファイルに次のものがあります。

%module coh
%{
#include "coherence/lang.ns"
#include "coherence/net/CacheFactory.hpp"
#include "coherence/net/NamedCache.hpp"
%}

%include "coherence/lang.ns"
%include "coherence/net/CacheFactory.hpp"
%include "coherence/net/NamedCache.hpp"

私はそれをかき混ぜます:

$ swig -c++ -ocaml -I/opt/coherence-cpp/include coh.i

しかし、エラーメッセージが表示されます。

/opt/coherence-cpp/include/coherence/net/CacheFactory.hpp:31: Error: Syntax error in input(1)

そのファイルの31行目は次のとおりです。

using coherence::run::xml::XmlElement;

usingキーワードはサポートされていませんか?これに対する回避策はありますか、それとも自分のC ++ラッパーを作成し、代わりにSWIGを作成する必要がありますか?ありがとう!

更新:私は自分のラッパーを書くことにしました(そして将来的には、最初から別のアプローチを取るために)。

4

5 に答える 5

2

MSDNには次のように書かれています。

usingディレクティブとusing宣言の違いに注意してください。using宣言では、個々の名前を修飾なしで使用できます。usingディレクティブでは、名前空間内のすべての名前を修飾なしで使用できます。

(私はそれを推測しています)SWIGは「usingディレクティブ」をサポートしますが、「using宣言」はサポートしません。

つまり、次を使用できます。

using namespace somenamespace::mynamespace;

ただし、使用することはできません。

using somenamespace::mynamespace::MySymbol;
于 2011-10-26T07:33:32.700 に答える
1

SWIGは「宣言の使用」をサポートしています。構文エラーはさらに診断する必要があります。前処理された出力を使用して確認することをお勧めします

$ swig -E -c++ -ocaml -I/opt/coherence-cpp/include coh.i
于 2012-06-30T09:03:25.287 に答える
1

usingC ++ヘッダーでは、他のインクルージョンに伝播されるため、これは悪い習慣です。したがって、SWIGがそれらをサポートしていないという事実は大したことではありません。

ヘッダーを削除usingして、SWIGを続行することをお勧めします。

于 2011-08-24T11:50:12.790 に答える
0

結局、これにはSWIGを使用しないことにしました。

于 2011-08-24T11:24:56.897 に答える
0

SWIG 3.0.11は、usingキーワードを使用したC++11タイプのエイリアシングのサポートを追加しました。

https://sourceforge.net/p/swig/news/2016/12/swig-3011-released/

于 2017-06-21T01:15:41.577 に答える