来自可变类型名模板和重载的数据成员

Data members from variadic typename template and overloading

类似于问题 ,但有一个额外的问题:

假设我有 2 个(或多个)结构:

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

我想制作一个 class 来保存每个动态数组,并且能够调用对其中一种类型进行特定处理:

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

其中,如果我调用 process<A> 它将遍历所有“as”,并且 process<B> 遍历所有“bs”。

此外,我提供 A、B 或任意数量的结构(彼此不同)作为可变模板参数。换句话说,做 Manager<A, B> 是预期的用途,但是做 Manager<A, A, B> 是不允许的(因为有 2 个 A)。

这是否可能(并且,如果可能,不会产生大量愚蠢的样板代码或不可读的方式)?

据我了解,std::tuple 也能完成这项工作:

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