Как использовать SWIG с «использованием» - PullRequest
2 голосов
/ 29 июля 2011

Я пытаюсь использовать SWIG 2.0.4 в библиотеке C ++, в моем файле .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?Спасибо!

ОБНОВЛЕНИЕ : Я решил написать свою собственную обертку (и в будущем использовать другой подход с самого начала).

Ответы [ 5 ]

2 голосов
/ 26 октября 2011

MSDN имеет это сказать:

Обратите внимание на разницу между директивой using и использованием объявление: объявление использования позволяет отдельному имени быть используется без квалификации, директива using разрешает все имена в пространстве имен для использования без квалификации.

(я предполагаю, что) SWIG поддерживает «директиву использования», но не «декларацию использования».

То есть вы можете использовать:

using namespace somenamespace::mynamespace;

Но вы не можете использовать:

using somenamespace::mynamespace::MySymbol;
1 голос
/ 30 июня 2012

SWIG поддерживает «использование объявлений».Ваша синтаксическая ошибка нуждается в дальнейшей диагностике.Я предлагаю посмотреть на предварительно обработанный вывод, используя

$ swig -E -c++ -ocaml -I/opt/coherence-cpp/include coh.i
1 голос
/ 24 августа 2011

using в заголовках C ++ - плохая практика, поскольку она распространяется на другие включения, поэтому тот факт, что SWIG не поддерживает их, не имеет большого значения.

Лучше удалить using inваши заголовки, и продолжайте SWIG!

0 голосов
/ 21 июня 2017

SWIG 3.0.11 добавлена ​​поддержка псевдонимов типа C ++ 11 с ключевым словом using.

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

0 голосов
/ 24 августа 2011
...