配列の長さを後で constexpr で使用できる、任意の (ただし一定の) 長さの std::arrays のセットを格納する方法はありますか?
標準コンテナは論外だと思いますが、何らかのテンプレート ソリューションがあるかもしれません。すべての情報はコンパイル時に利用可能ですよね?
コード例:
#include <iostream>
#include <string>
#include <vector>
#include <array>
#include <algorithm>
// Class storing an array of any (but constant) size
struct A {
const std::vector<std::string> container;
const int container_size;
A(const std::vector<std::string>& v, int size) : container(v), container_size(size) { }
};
int main() {
// List of variable length const arrays and their sizes
std::vector<A> myAList {
A({ std::string("String1"), std::string("String2") }, 2),
A({ std::string("String1") }, 1)
};
// How would I go about using the size of each array in a constexpr?
for (auto const& a : myAList) {
// Example constexpr:
// somefunc(std::make_index_sequence<a.container_size>{});
// 2nd example converting to actual std::array
// std::array<std::string, a.container_size> arr;
// std::copy_n(std::make_move_iterator(a.begin()), a.container_size, arr.begin());
}
return 0;
}
アップデート:
詳細が求められたので、ここに行きます。配列がどのように定義されているか、機能するものは何でも気にしません...使用される正確な constexpr は、サンプルコードのものですstd::make_index_sequence<CONSTEXPR>{}
。コンパイル時に定義された一連の定数配列があることを知っているだけで、 constexpr の他の場所でそれらの長さを参照できるはずです。
一体、私は実際には長さを保存するだけで問題ありません:
// Class storing an array size
struct A {
A(int size) : container_size(size) { }
const int container_size;
};
int main() {
// List of lengths
std::vector<A> mySizeList { 2, 1 };
for (auto const& a : mySizeList) {
// somefunc(std::make_index_sequence<a.container_size>{});
}
return 0;
}