c++ - 对构造函数调用的约束

标签 c++ qt

我设计了一个 InputField 类,它有一个带有 2 个参数的构造函数:explicit InputField(InputFieldIndex uiIndex, QString sName) noexcept;

我将此类存储在 QVector 中,因此,不幸的是,我必须添加一个默认构造函数。在软件设计方面,这对我不利(因为我对 uiIndex 有限制)。 有没有办法只允许 QT(在我的例子中是 QVector)调用默认构造函数?宏还是预处理器指令?

最佳答案

你可以尝试制作QVector<InputField> friend 类。

考虑以下玩具示例:

class Foo {
    // Grant QVector<Foo> access to this class' internals
    friend class QVector<Foo>;
public:
    explicit Foo(int a, bool b) {
        // Empty
    }
private:
    Foo() {
        // Callable by this class and QVector<Foo>.
    }
};

有了这个,就可以存储 Foo 的实例在QVector<Foo> :

QVector<Foo> myList;
myList << Foo(1, true) << Foo(2, false);

但是,以下内容例如失败:

Foo foo;

关于c++ - 对构造函数调用的约束,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/50374590/

相关文章:

c++ - QSerialPort 在应用程序启动之前正在使用

c++ - 在 for 循环中递增结构值每次都会返回相同的值

c++ - 邮寄消息 : Access Denied

c++ - 虚幻 : "Unknown type name UTextRenderComponent" compile error while following tutorial

c++ - 如何使用 curl 请求发送数据

c++ - 基本 C++ 习语/技术

C++ 显示 OSX 权限对话框

c++ - 在C++中,当手指在触摸屏上移动时如何更改标签文本?

windows - 如何将 Windows SDK 与 Qt Creator 一起使用

qt - 在OpenCV 2.4.5中使用QtCreator 2.7.0