我想为unique指针实现std::end。 问题是我需要获取N(数组中元素的数量)。
1.方法:从模板中推导类型
template <typename T, size_t N>
T* end(const unique_ptr<T[N]> &arr)
{
return arr.get() + N;
}
但是我遇到了错误:error: C2893: 无法使用以下模板参数特化函数模板 'T *test::end(const std::unique_ptr> &),其中[_Ty = T [N]]:'T = int''N = 0x00'
看起来不可能推断出 N 的值。
2.从分配器中获取 N。 分配器必须知道 N 才能正确执行 delete[] 操作。您可以在 这篇文章 中了解更多信息。有两种方法:
过度分配数组,并将 n 置于其左侧。
使用关联数组,以 p 为键,n 为值。
问题在于如何跨平台/编译器获取此大小。
也许有人知道更好的方法或知道如何使其正常工作?
unique_ptr<T[N]>
可以传递给end
,而不是一个unique_ptr<T[]>
。在你的问题中,你或许还可以展示一些你打算如何调用end
的相关代码。 - Aaron McDaid