只允许特定的类“ Fabric”构造类“ Foo”及其所有子类的实例

紫罗兰色长颈鹿

有没有一种方法可以确保仅类Fabric可以构造该类Foo及其所有子类,而不必friend class Fabric在每个子类中声明私有构造函数

struct Foo {
   friend class Fabric;
protected:
   Foo() = default;
};

struct FooConcrete1 : Foo {
   friend class Fabric;
protected:
   Foo() = default;
};

由于友谊不是继承的,因此在声明每个子类时似乎都需要两个手动操作,这很容易出错。

艾伦·伯特尔斯

一种选择是声明只能由标签构造的标记结构,Fabric并将此对象传递给的构造函数Foo如果您忘记将构造函数添加到派生类中,则会收到Foo默认无法构造的错误

struct FooTag
{
    friend struct Fabric;
private:
    FooTag();
};

struct Foo {
    Foo(FooTag tag) {}
};

struct FooConcrete1 : Foo {
    using Foo::Foo;
};

struct Fabric
{
    void test()
    {
        FooConcrete1 f = FooConcrete1(FooTag());
    }
};

int main()
{
    FooConcrete1 f; // can't construct as we can't construct FooTag
    return 0;
}

本文收集自互联网,转载请注明来源。

如有侵权,请联系 [email protected] 删除。

编辑于
0

我来说两句

0 条评论
登录 后参与评论

相关文章

Perl-是否可以导入一个类及其所有子类?

哪些重构工具可以将Java类及其所有相似名称的实例重命名?

Python 3的基类类型的注释只允许当前子类

类文字左侧只允许使用类

如何只允许特定类的元素成为可迭代的元素(对于自定义类)

SPARQL主题及其所有超类的所有谓词-宾语对

有没有办法只允许对C ++中的最终类进行继承

获取主类以及所有子类的所有实例

如何使用javascript只允许将数字填充到具有类名称的输入ref中?

使div及其所有子级忽略父类样式

如何从库中提取单个类及其所有依赖项?

VBA-查找知道其标题,类及其所有者的窗口句柄

Sparql 1.1获取特定类的所有实例,但不包括子类中的任何实例

从基类构造函数创建子类实例

为特定的构造函数创建实例类

跟踪超类中子类的所有实例

Pytest只能实例化一个类对象以测试其所有方法吗?

为什么允许使用子类的构造函数实例化父类对象?

从基类结构构造子类

python 2.7:类型错误:元类冲突:派生类的元类必须是其所有基类元类的(非严格)子类

从Java中的类对象构造类实例

允许HTMLPurifier中具有特定前缀的类

类构造函数 - 没有构造函数的实例

如何使用超类的构造函数创建子类的实例

如何使用超类构造函数创建子类的实例?

在子类实例化中使用替代超类构造函数

使用构造函数类制作现有类实例的副本

使类构造函数私有

是否有可能避免重写子类中的所有超类构造函数参数?