Variadic template heterogeneous container

雨燕双飞 提交于 2019-12-02 02:15:17

Here's it done using indicies:

namespace detail
{
    template <int... Is>
    struct index { };

    template <int N, int... Is>
    struct gen_seq : gen_seq<N - 1, N - 1, Is...> { };

    template <int... Is>
    struct gen_seq<0, Is...> : index<Is...> { };
}

template <typename...Args>
struct Prc
{
    std::tuple<Args...> mems;

    template <int... Is>
    void process(detail::index<Is...>)
    {
         auto l = { (std::get<Is>(mems).prnt(), 0) ... };
    }

    void process()
    {
        process(detail::gen_seq<sizeof...(Args)>());
    }
};

Here is some code that iterates a tuple:

struct A { void print () { clog << "A" << endl; } };
struct B { void print () { clog << "B" << endl; } };
struct C { void print () { clog << "C" << endl; } };

template<unsigned N>
struct iter
{
    template<typename T>
    static void f (T &t)
    {
        iter<N-1>::f (t);
        get<N> (t).print ();
    }
};

template<>
struct iter<0>
{
    template<typename T>
    static void f (T &t)
    {
        get<0> (t).print ();
    }
};

And the calling code:

    tuple <A,B,C> t;
    iter<tuple_size<decltype(t)>::value-1>::f (t);

I think you could modify this to fit your needs. NumElements in your code is known at compile time, so I think you would remove that member altogether.

易学教程内所有资源均来自网络或用户发布的内容,如有违反法律规定的内容欢迎反馈
该文章没有解决你所遇到的问题?点击提问,说说你的问题,让更多的人一起探讨吧!