我有一个非常简单的POD结构,其中包含如下所示的数组成员。我在memberArray
使用参考固定长度数组参数初始化固定长度数组成员时遇到问题const uint32_t(&rArrayArg)[22]
。在最终目标环境中,我将无法访问标准库。
成员初始化器memberArray{*rArrayArg}
仅从rArrayArg
arg复制第一个条目。为了查看完整的数组,我需要在构造函数的主体中使用memcpy或(如此处所示)std :: copy。
我还有另一个采用二维固定长度数组的POD结构,该数组const uint32_t(&rArrayArg)[4][5]
将用于初始化相应的2d成员,因此,首选成员初始化语法的通用解决方案。
struct TestStruct {
explicit TestStruct(
const uint32_t(&rArrayArg)[22])
: memberArray{*rArrayArg}
{
//std::copy(std::cbegin(rArrayArg), std::cend(rArrayArg), memberArray);
}
uint32_t memberArray[22];
// this stream helper is only present for debugging purposes
// in the actual target environment, I will not have access to std::
friend std::ostream& operator<<(std::ostream& os, const TestStruct& rhs) {
os << "TestStruct: ";
for (auto next : rhs.memberArray) {
os << next << ",";
}
return os;
}
};
以下实时演示显示了将部分填充的固定数组参数uint32_t fixedLenArg[22] = {1,2,3,4,5,6};
传递给显式构造函数的结果。打印结果显示:
TestStruct: 1,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,
所以很明显只有第一个参数被复制。如果取消注释构造函数主体中的std :: copy(这是调试操作,因为在最终环境中我无权访问std :: copy),我将得到以下信息:
TestStruct: 1,2,3,4,5,6,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,
我希望我正确理解了问题,然后应该可以解决:
struct TestStruct {
constexpr static size_t arraySize = 22;
explicit TestStruct(const uint32_t(&rArrayArg)[arraySize]) : memberArray() {
for (size_t i = 0; i < arraySize; ++i)
memberArray[i] = rArrayArg[i];
}
uint32_t memberArray[arraySize];
// this stream helper is only present for debugging purposes
// in the actual target environment, I will not have access to std::
friend std::ostream& operator<<(std::ostream& os, const TestStruct& rhs) {
os << "TestStruct: ";
for (auto next : rhs.memberArray) {
os << next << ",";
}
return os;
}
};
本文收集自互联网,转载请注明来源。
如有侵权,请联系 [email protected] 删除。
我来说两句