私はEntity Component Systemで作業していて、Componentクラス自体から派生するクラスの数に基づいてComponentタイプ番号を作成しようとしています。Constexprとknow how countクラス
しかし、私はC++に欠けている機能がいくつかあると思います。 コンポーネントクラスの数は、ベクトル、ビットマスクなどの区切りに使用する必要があるconstexpr整数である必要があります。 今のところ、すべての派生クラスに固有の型番号がありますが、 bitsetは派生クラスの数です。
ベース:派生
//!
//! \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を試しましたが、成功しませんでした。
あなたはいくつかのアイデアがあるなら、私はすべての耳です。 おかげでとにかく
シモンズ:私は(今のG ++ 6-2)任意のC++制限はありません
真剣に、コメントが多すぎるようなことがあります。特に言語機能のために... – StoryTeller
申し訳ありませんが、コードを削除しましたがコメントを忘れてしまった!ありがとう –
あなたの質問に答えるために、私はあなたができるとは思わない。派生クラスの数はバインドされておらず、すべての翻訳単位がコンパイルされている場合は常に利用可能であるとは限りません。 – StoryTeller