gpt4 book ai didi

c++ - Constexpr 和知道如何计算类

转载 作者:行者123 更新时间:2023-11-30 05:20:12 30 4
gpt4 key购买 nike

我正在研究一个实体组件系统,并尝试根据从组件类本身派生出多少类来生成组件类型编号。

但我认为 C++ 中缺少一些功能,无法满足我的所有需求。因为 Component 类的数量应该是一些 constexpr 整数,我应该用它来分隔 vector 、位掩码等……现在我可以让每个派生类都有一个唯一的类型号,但无法检测到位集的大小,即派生类的数量。

基础:

  //!
//! \class ComponentBase
//! \brief Exist only to manage CounterType in a prepocessor way
//!
class ComponentBase {


protected:
static uint32_t CounterType; // Counter of actual component number

public:
virtual ~ComponentBase() {}
};
}

typedef std::bitset<ComponentBase::CounterType> T_Mask;

派生:

  //!
//! \class Component
//! \brief Superclass for Component, stock Type number and Manager
//!
template < typename Derived >
class Component : public ComponentBase {

public:
static const uint32_t Type;

protected:
Component() = default;
};
}

template < typename Derived >
const uint32_t Component<Derived>::Type = ++ComponentBase::CounterType;

但现在我不能使用 CounterType 来设置位集大小。尝试使用 constexpr 但没有成功。

如果您有任何想法,我会洗耳恭听。还是谢谢

Ps:我没有任何 C++ 限制(现在是 G++ 6-2)

最佳答案

您所要求的在 C++ 中是不可能的。

假设您的 Base 和 Derived 可通过 header.hpp 获得(传递#included in)并且是合法的 c++

您的项目中有以下文件:

1.cpp

#include "header.hpp"
class One {};

class ComponentOne : public Component<One> {};

2.cpp

#include "header.hpp"
class Two {};

class ComponentOne : public Component<Two> {};

你启动 cc.exe 一次将 1.cpp 编译成 1.o,然后启动另一个实例将 2.cpp 编译成 2.o,会发生什么?

关于c++ - Constexpr 和知道如何计算类,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/40788739/

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