Home > front end >  Data members from variadic typename template and overloading
Data members from variadic typename template and overloading

Time:10-13

Similar to question Declare member variables from variadic template parameter, but with an additional question:

Let's say I have 2 (or many) structs:

struct A { int a; };
struct B { int b; };

And I want to make a class holding dynamic arrays of each, AND be able to have a call doing specific processing to one of those types:

struct Manager<A, B>
{
    std::vector<A> as;
    std::vector<B> bs;
    template<typename T> process();
};

Where, if I call process<A> it will loop over all "as", and process<B> loops over all "bs".

Additionally, I provide A, B or any number of structs (distinct from eachother) as variadic template parameters. In other words, doing Manager<A, B> is the expected use, but doing Manager<A, A, B> is not allowed (because of the 2 'A's).

Is this possible (and, if possible, in a way that doesn't create a stupidly high amount of boilerplate code or is unreadeable)?

CodePudding user response:

From what I understand, std::tuple does the job too:

template <typename... Ts>
struct Manager
{
    std::tuple<std::vector<Ts>...> vectors;

    template <typename T, typename F>
    void process(F f) {
        for (auto& e : std::get<std::vector<T>>(vectors)) {
            f(e);
        }
    }
};

Demo

  • Related