gpt4 book ai didi

C++ 在编译时知道给定类型的对象数

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

我想注册给定类的所有对象,以便稍后我可以使用静态方法迭代它们。我想出了下面的解决方案。我的想法是我将把这个类提供给和我一起工作的其他人,他们将派生这个类来设计他们自己的模块。但是,我不得不将指针数组初始化为一个较大的大小,因为我不知道将创建多少个对象。如果它们都是静态声明的,有没有办法在编译时找出创建的对象的数量?

class Module {

static Module* module_list[];
static int count;

public:
Module(string str){
id = count;
name = str;
module_list[count++] = this;
}

static void printModules(){
for(int i = 0; i < count; i++)
cout << module_list[i]->name << endl;
}

int id;
string name;
};

Module* Module::module_list[256];
int Module::count = 0;

Module x("module x"), y("module y");

int main(){
Module::printModules();
}

注意:我最初的目标是在编译时创建列表本身,但是,我不知道如何做到这一点。欢迎提出建议。

最佳答案

Is there any way to find out at compile time the number of objects created if they all are declared statically?

不是真的,因为对象可能在单独的翻译单元中实例化。即使它们不是,目前也没有办法反射(reflect)特定的翻译单元并在 C++ 中查找特定对象的所有实例化(除非您想使用外部解析器 +代码生成器解决方案)


However, I had to initialize the pointer array to a large size since I don't know exactly how many of this objects will be created.

只需使用 std::vector,因此您不需要任何固定限制:

auto& getModuleList()
{
static std::vector<Module*> result;
return result;
}

class Module {        
public:
Module(string str){
id = count;
name = str;
getModuleList().emplace_back(this);
}

关于C++ 在编译时知道给定类型的对象数,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/42856430/

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