26 #include <type_traits>
38 template <
class StateType>
39 class StateTemplate :
virtual public State
78 template <
class StateType>
81 static_assert(std::is_base_of_v<StateTemplate, StateType>,
82 "The template parameter of StateTemplate, must be a class that derives from "
86 std::string className = GetTypeString<StateType>();
88 if (className.size() > 1)
90 className = className.substr(0, className.size() - 1);
93 setStateClassNameFromTypeName(className);
96 template <
class StateType>
102 if (stateName.empty())
104 if (ptr->stateClassName.empty())
106 throw LocalException(
107 "StateName and StateClassName are empty - cannot create state instance");
110 stateName = ptr->stateClassName;
113 ptr->setTag(stateName);
114 ptr->stateName = stateName;
118 template <
class StateType>
122 StatePtr result =
new StateType(*
dynamic_cast<const StateType*
>(
this));