利用 TypeList 在編譯時**自動生成類繼承體系**,實現「寫一次類型列表,生成無限可能的類組合」。
將 TypeList 中每個類型實例化為一個基類 `Unit
template class Unit>
class GenScatterHierarchy;
template class Unit>
class GenScatterHierarchy, Unit>
: public GenScatterHierarchy
, public GenScatterHierarchy {
public:
typedef TypeList TList;
typedef GenScatterHierarchy LeftBase;
typedef GenScatterHierarchy RightBase;
};
template class Unit>
class GenScatterHierarchy : public Unit {
public:
typedef Unit LeftBase;
};
template class Unit>
class GenScatterHierarchy {};
要求 `Unit
template class Unit, class Root = EmptyType>
class GenLinearHierarchy;
template class Unit, class Root>
class GenLinearHierarchy, Unit, Root>
: public Unit> {};
template class Unit, class Root>
class GenLinearHierarchy, Unit, Root>
: public Unit {};
通過整數索引在散亂繼承體系中精確訪問對應 `Unit` 基類:
template class Unit, int i>
typename TypeAt::Result& Field(GenScatterHierarchy& obj) {
// 遞歸轉型到對應基類
return FieldHelper(obj, Int2Type());
}
// 需配合 Int2Type 模板實現編譯時整數傳遞
結合上述機制,可自動生成:
// 使用示例
typedef AbstractFactory EnemyFactory;
typedef ConcreteFactory EasyFactory;
// EasyFactory 同時實現 Create()->SillySoldier 等
C++17 可用 `std::variant` + `std::visit`、折疊表達式、`template auto` 簡化部分場景,但「類型列表驅動類生成」的元編程思想在框架設計 (如 Loki、Boost.MPL、現代反射庫) 中仍具核心價值。