gpt4 book ai didi

c++ - 跟踪 C++ 中父类(super class)有多少个派生类的最佳方法是什么?

转载 作者:行者123 更新时间:2023-11-28 02:26:21 26 4
gpt4 key购买 nike

我有一个项目,其中父类(super class)有很多子类。我使用创建随机生成的子类对象的方法,并使用静态变量来估计存在多少个子类。我试着记住总是增加它。但是,如果其他人开始使用此代码怎么办?他可能会错过这一步,因此无论他的代码是否正常工作,我的随机测试都会通过。有没有什么机制可以避免这种情况?或者也许我的设计完全错误,我应该以某种方式更改它?

编辑:我知道如何计算创建了多少个对象。我正在寻找一种机制来找出存在多少个子类。

最佳答案

Or maybe my design is completly wrong and I should change it somehow?

我觉得是。您可以将实例计数保留在类层次结构之外,并通过一组(模板化的)工厂函数来控制它。这将允许您使用(或不使用)此计数系统,并且允许您根据需要扩展/自定义它。

编辑:计算特化的侵入式解决方案:

class Base // root of your hierarchy
{
protected:
Base(char const * const type)
{
instances_.insert(type);
}

virtual ~Base() = 0;

public:
static decltype(instances_.size()) CountSpecializations() const
{
return instances_.size();
}

private:
static std::set<std::string> instances_;
};

/// This is convenience code: clients could simply call
/// Base(typeid(typename T).name()) on construction, witout it
template<typename T>
class TypedSpecialization: public Base
{
protected:
TypedSpecialization() : Base(typeid(typename T).name()) {}
};

客户端代码:

// actual specialization (w/o TypedSpecialization it would inherit from Base)
class Specialization1: public TypedSpecialization<Specialization1>
{
public:
Specialization1(): TypedSpecialization<Specialization1>() {}
};

int f()
{
assert(0 == Base.CountSpecializations());

Specialization1 s1, s2;
assert(1 == Base.CountSpecializations());
}

代码实际上并不计算代码库中现有特化的数量,而是计算自应用程序启动以来实例化的不同特化的数量。

关于c++ - 跟踪 C++ 中父类(super class)有多少个派生类的最佳方法是什么?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/30501077/

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