Dar*_*ieb 15 c++ arrays initialization const
我需要一种方法来初始化我目前正在处理的程序的数组的const元素.问题是我必须用函数初始化这些元素,没有办法像这样做:
const int array[255] = {1, 1278632, 188, ...};
Run Code Online (Sandbox Code Playgroud)
因为我必须生成很多数据.我尝试的是将数据memcpy到const int,但这不起作用,但没有奏效.
const int array[255];
void generateData(){
for(int i = 0; i < 255; i++) {
initializeSomehowTo(5, array[i]);
}
}
Run Code Online (Sandbox Code Playgroud)
我希望你明白我在想什么,对不起,如果我把这个问题翻倍,我一定忽略了它.
Aru*_*run 19
这个怎么样?
#include <array>
typedef std::array<int, 255> Array;
const Array array = generateData();
Array generateData(){
Array a;
for(int i = 0; i < a.size(); i++) {
initializeSomehowTo(a[i]);
}
return a;
}
Run Code Online (Sandbox Code Playgroud)
最简单的方法是从函数中获取填充数组,并使用它来初始化const
(或constexpr
)对象.但是,内置数组不能复制,但是std::array<T, N>
:
std::array<T, 255> array = initializeData();
Run Code Online (Sandbox Code Playgroud)
如果你需要一个内置数组,我可以想象初始化一个static
类的成员(实际上是模板),其中索引从一个扩展的索引扩展而来,std::make_index_sequence<255>
并用作数组中的位置参数,即,沿着这些行的东西:
#include <algorithm>
#include <iostream>
#include <iterator>
#include <utility>
int some_function(std::size_t i) { return i; }
template <typename> struct initialized_array_base;
template <std::size_t... I>
struct initialized_array_base<std::index_sequence<I...>> {
static const int array[sizeof...(I)];
};
template <std::size_t... I>
int const initialized_array_base<std::index_sequence<I...>>::array[sizeof...(I)]
= { some_function(I)... };
struct initialized_array
:initialized_array_base<std::make_index_sequence<256>> {
};
int main() {
std::copy(std::begin(initialized_array::array),
std::end(initialized_array::array),
std::ostream_iterator<int>(std::cout, " "));
std::cout << '\n';
}
Run Code Online (Sandbox Code Playgroud)
归档时间: |
|
查看次数: |
2225 次 |
最近记录: |