我设计了一个 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/