pack num of operation forwarding

This commit is contained in:
Christian Zimmermann 2018-05-20 15:15:05 +02:00
parent 8f94517aa4
commit 3b2889d38f
2 changed files with 16 additions and 1 deletions

View file

@ -37,6 +37,14 @@ namespace MultiArrayHelper
template <size_t N> template <size_t N>
struct PackNum struct PackNum
{ {
template <class MA, class ITuple, class... IPtrs>
static auto mkElemOperation(const MA& ma, const ITuple& ituple, IPtrs... iptrs)
-> decltype(PackNum<N-1>::mkElemOperation(ma, ituple, std::get<N>(ituple), iptrs...))
{
return PackNum<N-1>::mkElemOperation(ma, ituple, std::get<N>(ituple), iptrs...);
}
template <typename... T> template <typename... T>
static void printTuple(std::ostream& out, const std::tuple<T...>& tp) static void printTuple(std::ostream& out, const std::tuple<T...>& tp)
{ {
@ -94,6 +102,13 @@ namespace MultiArrayHelper
template<> template<>
struct PackNum<0> struct PackNum<0>
{ {
template <class MA, class ITuple, class... IPtrs>
static auto mkElemOperation(const MA& ma, const ITuple& ituple, IPtrs... iptrs)
-> decltype(ma(iptrs...))
{
return ma(iptrs...);
}
template <typename... T> template <typename... T>
static void printTuple(std::ostream& out, const std::tuple<T...>& tp) static void printTuple(std::ostream& out, const std::tuple<T...>& tp)
{ {

View file

@ -27,7 +27,7 @@ namespace MultiArrayTools
inline auto apply(const MultiArray<T,Ranges...>& ma) inline auto apply(const MultiArray<T,Ranges...>& ma)
-> OperationRoot<T,Ranges...> -> OperationRoot<T,Ranges...>
{ {
return mkElemOperation(ma, ituple); // -> pack_num return PackNum<sizeof...(Ranges)-1>::mkElemOperation(ma, ituple);
} }
private: private: