#include <iostream>
#include <map>
#include <functional> // std::ref
#include <vector>

class Foo
{
public:
    template <typename ...Ts>
    Foo(Ts&&... ts)  : Foo(std::map<char, std::vector<int>&>{std::forward<Ts>(ts)...}) {}

    Foo(std::vector<int> (&v)[26]) :
    A(v[0]),
    B(v[1])
    // and so on...
    {
    }

    Foo(std::vector<int> &a, std::vector<int> &b) : A(a), B(b) // and so on...
    {
    }

    Foo(const std::map<char, std::vector<int>&>& m) :
    A(m.at('A')),
    B(m.at('B'))
    // and so on...
    {
    }
    Foo(std::map<char, std::vector<int>&>&& m) :
    A(m.at('A')),
    B(m.at('B'))
    // and so on...
    {
    }

    virtual void DoSomething()
    {
        A.push_back(42);
        std::cout << A[0] << std::endl;
    }

private:
    std::vector<int> &A, &B; //, &C, &D, &E, &F, &G; // and so on...
};


int main()
{
    {
        std::vector<int> v[26];

        Foo foo(
            std::make_pair('A', std::ref(v[0])),
            std::make_pair('B', std::ref(v[1]))
            // And so on...
        );

        foo.DoSomething();
        std::cout << v[0][0] << std::endl;
    }
    {
        std::vector<int> v[26];

        Foo foo(v);

        foo.DoSomething();
        std::cout << v[0][0] << std::endl;

    }
    {
        std::vector<int> v[26];

        Foo foo(v[0], v[1]);

        foo.DoSomething();
        std::cout << v[0][0] << std::endl;

    }
    {
        std::vector<int> v[26];
        const std::map<char, std::vector<int>&> m {
            std::make_pair('A', std::ref(v[0])),
            std::make_pair('B', std::ref(v[1]))
            // And so on...
        };
        Foo foo(m);

        foo.DoSomething();
        std::cout << v[0][0] << std::endl;
    }
    return 0;
}
