gpt4 book ai didi

c++ - 如何痛饮省略前向声明

转载 作者:IT王子 更新时间:2023-10-29 01:41:20 27 4
gpt4 key购买 nike

我正在尝试在 vendor header 上运行 swig,因此我不需要在单独的 header 文件中重新定义实现

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: Error: Syntax error in input(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_NAMESPACE


class 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 省略前向声明?

最佳答案

如果您真的需要通知 SWIG 它应该忽略源代码中的某些内容,您可以使用它定义的宏:Documentation

因此您的 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 所需的声明对于编译时间来说是值得的。

关于c++ - 如何痛饮省略前向声明,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/46218476/

27 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com