как прыгнуть опустить декларацию

Я пытаюсь запустить Swig на заголовке поставщика, поэтому мне не нужно переопределять реализацию в отдельном заголовочном файле.

swig -go -cgo -intgosize 64 -module qt -o $WORK/qt/_obj/qt_wrap.cxx -outdir $WORK/qt/_obj/ \
-I$HOME/Qt5.9.1/5.9.1/gcc_64/include -I$HOME/Qt5.9.1/5.9.1/gcc_64/include/QtOpenGL \
-I$HOME/Qt5.9.1/5.9.1/gcc_64/include/QtWidgets -I$HOME/Qt5.9.1/5.9.1/gcc_64 \
/include/QtGui -I$HOME/Qt5.9.1/5.9.1/gcc_64/include/QtCore -c++ qt.swigcxx

Я получаю ошибку ниже во время go build

$ HOME / Qt5.9.1 / 5.9.1 / gcc_64 / include / QtWidgets / qapplication.h: 57: Ошибка:
Синтаксическая ошибка в вводе (1).

После проверки

qapplication.h: 57

#include <QtWidgets/qtwidgetsglobal.h>
#include <QtCore/qcoreapplication.h>
#include <QtGui/qwindowdefs.h>
#include <QtCore/qpoint.h>
#include <QtCore/qsize.h>
#include <QtGui/qcursor.h>
#ifdef QT_INCLUDE_COMPAT
# include <QtWidgets/qdesktopwidget.h>
#endif
#include <QtGui/qguiapplication.h>

QT_BEGIN_NAMESPACEclass QDesktopWidget;

Очевидно, провал на предварительную декларацию.

Ниже приведен qt.swigcxx:

// See swig.org for more inteface options,
// e.g. map std::string to Go string
%module qt
%{
#include <QPushButton>
#include <QApplication>
%}

%ignore "";%include <qapplication.h>
%include <qpushbutton.h>

Как я могу изменить так, чтобы swig пропустил предварительное объявление?

2

Решение

Если вам действительно нужно сообщить SWIG, что он должен что-то игнорировать в исходном коде, вы можете использовать макросы, которые он определяет: Документация

Таким образом, ваш qapplication.h изменится на это:

#include <QtWidgets/qtwidgetsglobal.h>
#include <QtCore/qcoreapplication.h>
#include <QtGui/qwindowdefs.h>
#include <QtCore/qpoint.h>
#include <QtCore/qsize.h>
#include <QtGui/qcursor.h>
#ifdef QT_INCLUDE_COMPAT
# include <QtWidgets/qdesktopwidget.h>
#endif
#include <QtGui/qguiapplication.h>

QT_BEGIN_NAMESPACE

#ifndef SWIG
class QDesktopWidget;
#endif

Будьте осторожны с этой тактикой в ​​целом, однако, вы можете сделать что-то для успеха препроцессора SWIG, но затем потерпите неудачу при компиляции C ++, потому что упустили что-то важное.

Другой подход заключается в том, чтобы избежать %include в целом (если говорить о предпринимательском опыте здесь). По мере роста вашего проекта SWIG будет все больше тормозить в результате включения всего из ваших заголовочных файлов. В конце концов, простое копирование деклараций, необходимых SWIG, того стоит для времени компиляции.

2

Другие решения

Других решений пока нет …

По вопросам рекламы [email protected]