diff --git a/alib2common/src/abstraction/AlgorithmRegistry.hpp b/alib2common/src/abstraction/AlgorithmRegistry.hpp index c35067f9792fa7c020e5535d5fbe4fa9add50be0..2e400ab150cb0968ecd4d8c0a955b399e6d27a48 100644 --- a/alib2common/src/abstraction/AlgorithmRegistry.hpp +++ b/alib2common/src/abstraction/AlgorithmRegistry.hpp @@ -64,6 +64,11 @@ class AlgorithmRegistry { INCOMPATIBLE }; + template < class ParamType > + static ext::tuple < std::string, ext::set < abstraction::ParamQualifiers::ParamQualifier >, std::string > convertParamType ( std::string paramName ) { + return ext::make_tuple ( ext::to_string < typename std::decay < ParamType >::type > ( ), abstraction::ParamQualifiers::paramQualifiers < ParamType > ( ), std::move ( paramName ) ); + } + template < class ... ParamTypes > static ext::vector < ext::tuple < std::string, ext::set < abstraction::ParamQualifiers::ParamQualifier >, std::string > > convertParamTypes ( std::array < std::string, sizeof ... ( ParamTypes ) > paramNames ) { /* make unused parameter warning go away in case of sizeof ... ( ParamTypes ) == 0 */ @@ -72,7 +77,7 @@ class AlgorithmRegistry { ext::vector < ext::tuple < std::string, ext::set < abstraction::ParamQualifiers::ParamQualifier >, std::string > > params; unsigned i = 0; /* the evaluation order in initializer list is actually defined */ - ( void ) std::initializer_list < int > { ( params.push_back ( ext::make_tuple ( ext::to_string < typename std::decay < ParamTypes >::type > ( ), abstraction::ParamQualifiers::paramQualifiers < ParamTypes > ( ), std::move ( paramNames [ i ++ ] ) ) ), 0 ) ... }; + ( void ) std::initializer_list < int > { ( params.push_back ( convertParamType < ParamTypes > ( std::move ( paramNames [ i ++ ] ) ) ), 0 ) ... }; return params; }