如何在构造函数中的类成员数组中分配数组值,而无需使用STD库
How do you assign array values to class member array in constructor, without using the std library?
试图理解将值复制到类成员数组中的正确方法。当前,我将数组的每个值都复制到成员数组的相应元素:
struct IPAddress
{
IPAddress(const unsigned char values[4]) :
values{values[0], values[1], values[2], values[3]}
{
}
const unsigned char values[4];
};
int main(int argc, char** argv)
{
unsigned char values[] = {10, 0, 0, 1};
IPAddress address(values);
return 0;
}
这有效,但是有没有办法"自动"复制构造函数中的所有值?我的意思是,如果班级的价值观有100个元素而不是4个,该怎么办?或1000?
我知道我应该使用std::array
。但是,由于此代码是为微控制器构建的,因此使用std
库不是一个选择。
任何接受者?
您应该使用std::array
。这是标准库的一部分,不应该冒犯嵌入式编程。
如果您无法访问它,那么就不难像这样实现类。与原始阵列相比,这是一个直接的,具有较小语义的直接汇总。它也可能被重复使用,这使其成为您应该实施的实用程序的好候选者。
失败了,您可以依靠委派委员
struct IPAddress
{
IPAddress(const unsigned char values[4])
: IPAddress(values, std::make_index_sequence<4>{})
{
}
const unsigned char values[4];
private:
template<std::size_t... I>
IPAddress(const unsigned char values[4], std::index_sequence<I...>)
: values{values[I]...}
{
}
};
关键在包装中扩展values{values[I]...}
,它变成了初始化器,与您的原始器不同。请参阅Live 。
我知道我应该使用
std::array
。但是,由于此代码是为微控制器构建的,因此使用std
库不是一个选择。
如果您不想包括array
,则仍然可以实现自己的类型来解决您的问题:
template<typename T, std::size_t N>
class values_t {
public:
values_t(const T *ptr) {
// copy N elements
for (std::size_t i = 0; i < N; ++i)
value[i] = ptr[i]; // copy element
}
T& operator[](int i) { return value[i]; }
const T& operator[](int i) const { return value[i]; }
private:
typename std::remove_const<T>::type value[N];
};
然后,初始化IPAddress
的values
数据成员变得更简单:
struct IPAddress
{
IPAddress(const unsigned char values[4]) :
values{values} {} // <-- copy as a whole
values_t<const unsigned char, 4> values;
};
相关文章:
- std::向量与传递值的动态数组
- std::vector的包装器,使数组的结构看起来像结构的数组
- 初始化具有非默认构造函数的std::数组项的更好方法
- 在c++中尝试对对象数组进行排序时,出现std:bad_alloc错误
- 将 int 数组转换为 std::vector<int*>
- 输入std::数组时出现问题
- 缓存std::数组的选定元素,并在c++中自动保持其一致性
- 为什么std::vector比数组慢
- C++如何生成std::数组列表
- 捕获lambda中的std::数组
- 转换函数,将 std::数组的双精度作为参数或双精度作为参数单独转换
- 将无符号字符的向量存储在数组中会给我 std::bad_alloc
- 当 std::move 与 C 样式数组或不移动对象时会发生什么
- std::数组边界检查如何工作?
- 通过unique_ptr访问std::数组
- 我正在使用 std::bitset 并尝试创建两个大小为 100,000,000,000 的数组 std::bitset
- 对象的数组-STD ::数组 - 构造函数初始化问题
- 标准::数组<std::array<T、N2>、N> 数据成员上的括号运算符重载
- 从未来对象数组std::vector中检索值
- 如何将动态数组(std::vector)传递给odbc函数SQLBindParameter