gpt4 book ai didi

c++ - 具有方法概括 make_shared 和 make_unique 的复合指针特征类?

转载 作者:太空狗 更新时间:2023-10-29 23:11:09 24 4
gpt4 key购买 nike

对于 std::unique_ptr<T> , 我们有 std::make_unique<T[]>() ;
对于 std::shared_ptr<T> , 有 std::make_shared<T[]>() .

计算机科学中的一句著名格言是,我们要么什么都没有,要么什么都没有,要么任意多。好吧,在这种情况下,我们谈论的是复合指针或类似指针的对象。除了这两个之外肯定还有其他(例如:smart pointers for CUDA-related memory)。

好吧,我希望有类似以下功能的东西:

template <typename Ptr>
inline Ptr make(size_t count);

template <typename T, class Deleter = std::default_delete<T>>
inline std::unique_ptr<T[], Deleter> make<std::unique_ptr<T, Deleter>>(size_t count)
{
return std::make_unique<T[]>(count);
}

template <typename T>
inline std::shared_ptr<T[]> make<std::shared_ptr<T[]>>(size_t count)
{
return std::make_shared<T[]>(count);
}

但在特征类中,例如

template <typename Ptr>
struct pointer_traits;

作为pointer_traits<std::shared_ptr<T>>::make() .而且这个 traits 类也会有一个元素类型,一个原始指针类型(如果存在的话)等等——类似于迭代器 traits 类模板,std::iterator_traits .它也适用于普通指针,其制造者将是

template <typename T>
inline T* make<T*>(size_t count)
{
return new T[](count);
}

我能在标准库中找到这样的特征类或等效类吗?我尝试过但失败了...如果它不存在,标准委员会是否提出/讨论过类似的东西?

最佳答案

基于@NathanOlliver 的见解和建议:

标准库有一个 std::pointer_traits类,但那个没有实际执行分配的功能。向 C++ 标准委员会提出这个建议可能会有用,我至少会尽快尝试实现它。如果有任何进展,将在此处发布更新。

关于c++ - 具有方法概括 make_shared 和 make_unique 的复合指针特征类?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/51506521/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com