构造函数调用的约束

Jos*_*ier 2 c++ qt

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

我将这个类存储在a中QVector,所以,不幸的是,我必须添加一个default-contructor.在软件设计方面,这对我不利(因为我有一个约束uiIndex).有没有办法只允许QT(QVector在我的情况下)调用默认构造函数?宏或预处理器指令?

Mar*_*her 5

你可以尝试做QVector<InputField>一个朋友班.

考虑以下玩具示例:

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>.
    }
};
Run Code Online (Sandbox Code Playgroud)

有了这个,就可以将实例存储FooQVector<Foo>:

QVector<Foo> myList;
myList << Foo(1, true) << Foo(2, false);
Run Code Online (Sandbox Code Playgroud)

但是,以下将失败:

Foo foo;
Run Code Online (Sandbox Code Playgroud)

  • @Milleras请注意,这意味着现在可以使用`QVector`访问默认构造实例,这意味着您仍然可以使用无效实例.而且就目前而言,检测这种情况并不一定容易. (3认同)