【发布时间】:2016-08-02 16:40:42
【问题描述】:
假设我有这个课程:
template<int N>
class A {
public:
A(const char *s) ...
private:
const char buf[N];
};
模板在那里,我可以在没有动态内存分配(要求)的情况下配置数组大小。 buf 成员是 const,因为它旨在在对象初始化后在对象的整个生命周期内保持不变。
澄清一下,我也无权访问 STL。
我有哪些选择来定义这个构造函数,以便我可以将s 的内容复制到buf 中?一种选择是const_cast,但我正在寻找不需要这个的替代方案。
【问题讨论】:
-
你能把
char buf[N]改成std::array吗? -
@Jarod42 不,很遗憾。我无权访问 STL。
-
@Ana 你能复制
libstdc++的来源吗?即使您无权访问std::array,您也将立即重新实现它。可能比最初的实现更糟糕。 -
初始化常量成员的唯一方法是通过构造函数初始化列表。初始化数组的唯一方法是复制到其中。不幸的是,你不能复制到初始化列表中的数组中,这意味着你不能做你想做的事。你想完成什么?
A的类是做什么用的?您要解决的实际问题是什么?为什么buf必须是常量,你不能让A的实例改为常量吗? -
您可以使用
MyArray代替std::array吗?
标签: c++ arrays initializer