如何解决C ++如何从构造函数中的数组参数初始化/复制const数组成员
以下类旨在存储单个 bool 和一个包含 100 个整数的数组。我想要一个构造函数,它将单个 bool 和一个 100 元素的数组(然后复制到对象中)作为参数。明显的写法如下
class Info {
private:
const int contents[100];
const bool symmetric;
public:
Info (const int contents[100],bool symmetric) : contents(contents),symmetric(symmetric) {}
// ...
};
但不幸的是,这不会编译,成员初始化列表中的内容参数(该行的第三个 contents
)似乎被视为一个指针。
我可以让它工作还是这是一个 C++ 限制?
- 出于空间和效率原因,我不想使用
std::array
或std::vector
。 [编辑] 我的是一个 C++ 语法问题,而不是关于std::array
是否有效。在不允许使用std::array
的相关情况下,答案可能很有用。 [结束编辑] - 在构造函数体中初始化不起作用,因为
contents
是const
。
我使用 C++14 和 clang(Linux 中的 CLion)并且来自 Java 世界。
解决方法
除了 std::array 之外,还有另一种方式,但您应该使用模板并使用可变参数功能。
让我们假设元素的数量是 amount
然后首先像这样声明你的类:
#include <utility>
template<size_t amount,typename = std::make_index_sequence<amount> >
class Info;
然后将您的类定义如下:
template<size_t amount,size_t ... _Idx>
class Info<amount,std::integer_sequence<size_t,_Idx...> > {
private:
const int contents[amount];
const bool symmetric;
public:
Info (const int contents_[amount],bool symmetric_) : contents{contents_[_Idx]...},symmetric(symmetric_) {}
};
现在您可以毫无问题地使用您的课程:
const int preinfo[3] = {1,2,3};
Info<3> minfo(preinfo,true);
此方法将使其速度非常快,但请注意,没有任何东西是免费的,使用此代码将使您的代码在编译后生成更大的二进制文件!
版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 dio@foxmail.com 举报,一经查实,本站将立刻删除。