Thanks to visit codestin.com
Credit goes to github.com

Skip to content

Commit 38412d4

Browse files
author
Davide Faconti
committed
cosmetic changes in the code of BehaviorTreeFactory
1 parent ead43ba commit 38412d4

File tree

1 file changed

+25
-27
lines changed

1 file changed

+25
-27
lines changed

include/behaviortree_cpp/bt_factory.h

Lines changed: 25 additions & 27 deletions
Original file line numberDiff line numberDiff line change
@@ -112,7 +112,7 @@ class BehaviorTreeFactory
112112
constexpr bool param_constructable =
113113
std::is_constructible<T, const std::string&, const NodeParameters&>::value;
114114
constexpr bool has_static_required_parameters =
115-
has_static_method_requiredNodeParameters<T>::value;
115+
has_static_method_requiredParams<T>::value;
116116

117117
static_assert(default_constructable || param_constructable,
118118
"[registerBuilder]: the registered class must have at least one of these two "
@@ -154,57 +154,55 @@ class BehaviorTreeFactory
154154
using has_params_constructor = typename std::is_constructible<T, const std::string&, const NodeParameters&>;
155155

156156
template <typename T, typename = void>
157-
struct has_static_method_requiredNodeParameters: std::false_type {};
157+
struct has_static_method_requiredParams: std::false_type {};
158158

159159
template <typename T>
160-
struct has_static_method_requiredNodeParameters<T,
160+
struct has_static_method_requiredParams<T,
161161
typename std::enable_if<std::is_same<decltype(T::requiredNodeParameters()), const NodeParameters&>::value>::type>
162162
: std::true_type {};
163163

164164
template <typename T>
165-
typename std::enable_if< has_default_constructor<T>::value && !has_params_constructor<T>::value>::type
166-
registerNodeTypeImpl(const std::string& ID)
165+
void registerNodeTypeImpl(const std::string& ID)
167166
{
168-
NodeBuilder builder = [](const std::string& name, const NodeParameters&)
169-
{
170-
return std::unique_ptr<TreeNode>(new T(name));
171-
};
172-
TreeNodeManifest manifest = { NodeType::ACTION, ID, NodeParameters() };
167+
NodeBuilder builder = getBuilderImpl<T>();
168+
TreeNodeManifest manifest = { getType<T>(), ID,
169+
getRequiredParamsImpl<T>() };
173170
registerBuilder(manifest, builder);
174171
}
175172

176173
template <typename T>
177-
typename std::enable_if< !has_default_constructor<T>::value && has_params_constructor<T>::value>::type
178-
registerNodeTypeImpl(const std::string& ID)
174+
NodeBuilder getBuilderImpl(typename std::enable_if< !has_params_constructor<T>::value >::type* = nullptr)
179175
{
180-
NodeBuilder builder = [](const std::string& name, const NodeParameters& params)
176+
return [](const std::string& name, const NodeParameters&)
181177
{
182-
return std::unique_ptr<TreeNode>(new T(name, params));
178+
return std::unique_ptr<TreeNode>(new T(name));
183179
};
184-
TreeNodeManifest manifest = { getType<T>(), ID, T::requiredNodeParameters() };
185-
registerBuilder(manifest, builder);
186180
}
187181

188182
template <typename T>
189-
typename std::enable_if< has_default_constructor<T>::value && has_params_constructor<T>::value>::type
190-
registerNodeTypeImpl(const std::string& ID)
183+
NodeBuilder getBuilderImpl(typename std::enable_if< has_params_constructor<T>::value >::type* = nullptr)
191184
{
192-
NodeBuilder builder = [](const std::string& name, const NodeParameters& params)
185+
return [](const std::string& name, const NodeParameters& params)
193186
{
194-
if( params.empty() )
195-
{
196-
// call this one that MIGHT use default initialization
197-
return std::unique_ptr<TreeNode>(new T(name));
198-
}
199187
return std::unique_ptr<TreeNode>(new T(name, params));
200188
};
201-
TreeNodeManifest manifest = { getType<T>(), ID, T::requiredNodeParameters() };
202-
registerBuilder(manifest, builder);
203189
}
204190

205-
void sortTreeNodeManifests();
191+
template <typename T>
192+
NodeParameters getRequiredParamsImpl(typename std::enable_if< has_static_method_requiredParams<T>::value >::type* = nullptr)
193+
{
194+
return T::requiredNodeParameters();
195+
}
206196

197+
template <typename T>
198+
NodeParameters getRequiredParamsImpl(typename std::enable_if< !has_static_method_requiredParams<T>::value >::type* = nullptr)
199+
{
200+
return NodeParameters();
201+
}
207202
// clang-format on
203+
204+
void sortTreeNodeManifests();
205+
208206
};
209207

210208
} // end namespace

0 commit comments

Comments
 (0)