我正在为GPU编写代码,因此我无法使用STL类,因为方法需要特殊的注释才能在GPU上运行。因此,我重新实现{\o 3, \a 2, \r 2, \e 1, \l 1, \m 1, \n 1, \t 1}
,并在其方法上使用适当的注释(std::array
)。我现在遇到的问题是我的复制构造函数调用成员上的赋值运算符:
INLINE
对于简单的template <typename T, Int n>
class Few {
T array_[n];
public:
INLINE Few(Few<T, n> const& rhs) {
for (Int i = 0; i < n; ++i) array_[i] = rhs.array_[i];
}
};
,它可以正常工作,但是有一种类型需要调用复制构造函数,而不是赋值运算符。如何让编译器复制构造数组中的每个元素?
答案 0 :(得分:8)
如何让编译器复制构造数组中的每个元素?
它已经存在了。这正是默认的拷贝构造函数在这里要做的。所以,不要自己提供,或明确默认:
Few(Few const& ) = default;
答案 1 :(得分:-3)
似乎使用了placement-new运算符。我不确定这是否完全符合C ++标准,但现在是:
INLINE Few(Few<T, n> const& rhs) {
for (Int i = 0; i < n; ++i) new (array_ + i) T (rhs.array_[i]);
}