我有两个别名来使用智能指针管理玩具状态机的状态集合:
using States = std::tuple<std::shared_ptr<State1>, std::shared_ptr<State2>>;
using CurrentState = std::variant<std::shared_ptr<State1>, std::shared_ptr<State2>>;
上面的示例有两个状态,但我想要 40。我自己的教育问题:如何使用可变参数模板(或任何其他策略)来避免在两个别名中重复 40 长的类型列表?我试图避免使用外部 TMP 库。
可能相关的问题:我想要在其结构下定义这些别名的对象来拥有状态。如果我担心机器中的每个状态都太大而无法将所有状态都保留在堆栈中,那么使用智能指针是否可以解决此问题?希望这个问题有意义。
如果你有这样的课程
template <typename... Ts> struct States {};
并且您想将这些别名添加到
States
,您可以这样做
template <typename... Ts>
struct States
{
using States = std::tuple<std::shared_ptr<Ts>...>;
using CurrentState = std::variant<std::shared_ptr<Ts>...>;
};