18#ifndef sitkMemberFunctionFactoryBase_h
19#define sitkMemberFunctionFactoryBase_h
27#include "Ancillary/type_list2.h"
28#include "Ancillary/FunctionTraits.h"
30#include <unordered_map>
40struct hash :
public std::hash<T>
52 seed ^= hasher(val) + 0x9e3779b9 + (seed << 6) + (seed >> 2);
55template <
typename S,
typename T>
68template <
class... TupleArgs>
77 std::apply([&seed](
auto... tupleElement) { (
hash_combine(seed, tupleElement), ...); }, tupleValue);
83template <
typename TMemberFunctionPo
inter,
typename TKey>
88 using ObjectType = typename ::detail::FunctionTraits<MemberFunctionType>::ClassType;
99 using FunctionObjectType = typename ::detail::FunctionTraits<MemberFunctionType>::FunctionObjectType;
109 template <
typename... Args>
114 return std::invoke(pfunc, objectPointer, std::forward<Args>(args)...);
std::tuple< unsigned int, int, unsigned int, int > KeyType
std::unordered_map< std::tuple< unsigned int, int, unsigned int, int >, FunctionObjectType, hash< std::tuple< unsigned int, int, unsigned int, int > > > FunctionMapType
static FunctionObjectType BindObject(MemberFunctionResultType(ObjectType ::*pfunc)(Args...), ObjectType *objectPointer)
TMemberFunctionPointer MemberFunctionType
typename ::detail::FunctionTraits< MemberFunctionType >::ClassType ObjectType
typename ::detail::FunctionTraits< MemberFunctionType >::ResultType MemberFunctionResultType
typename ::detail::FunctionTraits< MemberFunctionType >::FunctionObjectType FunctionObjectType
FunctionMapType m_PFunction
MemberFunctionFactoryBase()
void hash_combine(std::size_t &seed, const T &val)
AllPixelIDTypeList InstantiatedPixelIDTypeList
size_t operator()(const std::pair< S, T > &val) const
size_t operator()(std::tuple< TupleArgs... > tupleValue) const