wro*_*ame 4 c++ coding-style namespaces class
我看到Qt在Ui接口中放了一个类,如下所示:
namespace Ui {
class MainWindow;
}
class MainWindow : public QMainWindow
{
...
Run Code Online (Sandbox Code Playgroud)
此方法是否与将整个类封装在命名空间中相同?它当然看起来更清洁.
不,在您的示例中,Ui::MainWindow是MainWindow与全局命名空间中定义的类不同的类.
看吧:
namespace Ui {
class MainWindow;
}
class MainWindow
{
};
int main()
{
Ui::MainWindow mw; // fails due to incomplete type
}
Run Code Online (Sandbox Code Playgroud)
此代码将无法编译,因为它Ui::MainWindow是一个不完整的类型.
最有可能的是,Qt代码只是使用了前向声明.您可以在命名空间中转发声明类,但您仍然必须在同一命名空间中实际实现该类,否则它不是同一个类.