有没有办法存储一组任何(但恒定)长度的 std::arrays,其中数组的长度可以稍后在 constexpr 中使用?
我想标准容器是没有问题的,但可能会有某种模板解决方案。所有信息在编译时都可用,不是吗?
示例代码:
#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;
}