C++ Как создать вариативное количество массивов, размеры которых передаются через вариативный template?
Как создать такой класс test с вариативным template, что в template передаются числа, сколько чисел столько внутри класса создается массивов? Эти числа означают размеры массивов. С помощью метода getArray можно получать доступ к одному из этих массивов.
Далее представлен пример кода, в котором отображено как создать экземпляр требуемого класса и как им должно быть можно манипулировать.
test<5,8,10,15>t;
for(int i=0;i<5;i++)
cout<<t.getArray(0)[i];
for(int i=0;i<8;i++)
cout<<t.getArray(1)[i];
for(int i=0;i<10;i++)
cout<<t.getArray(2)[i];
for(int i=0;i<15;i++)
cout<<t.getArray(3)[i];
Ответы (2 шт):
Автор решения: maestro
→ Ссылка
Передавать номер массива в качестве параметра функции не получится, так как он должен быть известен на этапе компиляции. Здесь пример на кортеже, где номер массива передаётся как параметр шаблона.
template<size_t... sizes>
class test
{
public:
template<size_t arrNum>
auto get(){
return std::get<arrNum>(t);
}
private:
std::tuple<std::array<int, sizes>...> t;
};
test<5,8,10,15>t;
for(int i=0;i<5;i++)
cout<<t.get<0>()[i];
for(int i=0;i<8;i++)
cout<<t.get<1>()[i];
for(int i=0;i<10;i++)
cout<<t.get<2>()[i];
for(int i=0;i<15;i++)
cout<<t.get<3>()[i];
Автор решения: Chorkov
→ Ссылка
template< size_t ... sizes >
class test
{
std::vector< std::vector< int > > data = {
std::vector< int >( sizes, 0 ) ...
};
public:
std::vector< int >& getArray (size_t i) { return data.at(i); }
const std::vector< int >& getArray (size_t i) const { return data.at(i); }
size_t size() { return data.size(); }
};