作者:鬼蕾12_950_709 | 来源:互联网 | 2023-10-12 19:05
我有一个包含const数组的结构,并想在构造时将其初始化为特定值。不幸的是,它的内容取决于几个作为参数传递给构造函数的参数,并且需要一个函数来计算数组的内容。
我理想地想要做的事情看起来像这样:
d3.select("#my_dataviz")
.transition()
.duration(1000)
.style(???);
当然,这里有几个问题(无法从函数返回数组,数据类型不匹配等)。但是,有什么办法可能 ?
我已经看到其他类似的问题,建议为此使用std :: vector,但是这种堆分配是我的性能预算无法承受的。
按照内森(Nathan)的建议,应使用std::array
更改原始数组。这样,您仍然可以从堆栈分配中受益,但是现在您可以从副本进行初始化。
using MyArray = std::array;
const MyArray listOfValues;
MyArray processParameters(unsigned int parameter) {
MyArray arrayValues;
for(int i = 0; i <32; i++) {
arrayValues[i] = i * parameter;
}
return arrayValues;
}
我从数组数据类型中删除了const,因为它不是必需的,因为您的数组已经是const了,而且使用const unsigned int,您将无法在运行时设置arrayValues
的值。
,
这符合您的目的吗?我看不到堆分配。
struct SomeType {
const unsigned int *listOfValues;
const unsigned int * processParameters(unsigned int parameter) {
for(int i = 0; i <32; i++) {
_listOfValues[i] = i * parameter;
}
return _listOfValues;
}
SomeType(unsigned int parameter) :
listOfValues(processParameters(parameter))
{
}
private:
unsigned int _listOfValues[32];
};