gpt4 book ai didi

c++ - 强制引用类型

转载 作者:行者123 更新时间:2023-12-03 07:00:31 24 4
gpt4 key购买 nike

我们的代码库有以下常见缺陷。

class FrameworkApplication : public QApplication
{
protected:
FrameworkApplication(int& argc, char** argv) : QApplication(argc, argv) {}
}
这是一个抽象类。适合框架的每个模块都必须有自己的应用程序类,该应用程序类派生自该基类。
任何派生自它的类都必须通过 argc作为 int 引用。
class MyApplication : public FrameworkApplication
{
public:
// wrong! argc is not a reference type
MyApplication(int argc, char** argv) : FrameworkApplication(argc, argv) {}
}
上面的错误很容易犯,但它会导致进一步的细微错误。即使是经验丰富的成员有时也会陷入其中,然后挠头试图记住根本原因。
而且很容易犯上面的错误。编译器不会标记错误甚至警告。
我们可以在这里应用一个技巧/习语来强制编译器错误或警告吗?
编辑
我显然已经尝试过重载基类的ctor FrameworkApplication ...
class FrameworkApplication : public QApplication
{
protected:
explicit FrameworkApplication(int& argc, char** argv);

private:
explicit FrameworkApplication(int argc, char** argv);
}
但这被认为是模棱两可的,并导致类 FrameworkApplication 的 ctor 上的编译器错误.

最佳答案

这是一个 XY 问题。 argc 没有理由作为引用。真正的要求是 argclvalueQApplication 的生命周期内仍然有效.
几乎解决方案是制作 argc FrameworkApplication 的成员.但是,这不起作用,因为 FrameworkApplication::argc将在 QApplication 之后初始化子对象。
但是,应用程序对象是一种特殊情况,命令行也是如此。您的程序的每个运行实例只有一个,因此您可以安全地制作 FrameworkApplication::argc一个 static成员。这修复了生命周期。
你会想通过 (FrameworkApplication::argc=argc)作为 QApplication 的第一个参数.这确保了 FrameworkApplication::argcQApplication 之前初始化使用它。

关于c++ - 强制引用类型,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/64386663/

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