用推广make_shared和make_unique的方法复合指针特征类
Compound pointer traits class with method generalizing make_shared and make_unique?
对于std::unique_ptr<T>
,我们有std::make_unique<T[]>()
对于std::shared_ptr<T>
,有std::make_shared<T[]>()
。
计算机科学中一句著名的格言是,我们要么什么都没有,要么只有一个,要么任意多个。在这种情况下,我们讨论的是复合指针,或者类似指针的对象。除了这两个之外,肯定还有其他的(例如:CUDA相关内存的智能指针(。
嗯,我希望有以下功能:
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;
作为CCD_ 5。这个traits类还有一个元素类型、一个原始指针类型(如果存在的话(等等——类似于迭代器traits类模板std::iterator_traits。它也将存在于普通指针,其制造商将是
template <typename T>
inline T* make<T*>(size_t count)
{
return new T[](count);
}
我能在标准库中找到这种特质类或其等价物吗?我试过了,但失败了。。。如果它不存在,标准委员会是否提出/讨论过类似的建议?
基于@NathanOlliver的见解和建议:
标准库有一个std::pointer_traits
类,但该类没有实际执行分配的函数。向C++标准委员会提出这个建议可能会很有用,我至少会尽快尝试。如果有任何消息,将在这里发布更新。
相关文章:
- VS Code "command":"make"与终端窗口中的命令行"make"不同
- 算术复合运算符重载为非成员
- C++模板函数中的初始化 - 新的初始值设定项表达式列表被视为复合表达式
- 时间复杂度 当具有复合数据类型(如元组或对)时?
- 使用 make 编译 MPI,几个命名空间错误,例如"错误:未知类型名称'使用'?
- make 命令如何避免重新编译未更改的源文件?
- HDF5Cpp 扩展复合数据集超板问题
- MAKE:找不到包含的用户定义的头文件?
- 'make check' GLIBC 运行时的链接问题
- 返回复合模式的复合对象不返回整个对象
- 如何处理模板类中的复合类型
- 重载 C++ 中的复合运算符 (.*)
- C++析构函数调用两次,堆栈分配的复合对象
- Qt5 [make -snap] 无法正确编译:进程"/usr/bin/snap"代码 1 退出
- H5Tget_member_type() 返回复合 HDF5 数据类型的奇怪值
- 复合类型的动态数组
- 为什么这个复合语句作为用大括号和括号括起来的语句序列似乎不是有效的语句表达式
- 对复合分配中的"常量"的混淆
- mingw32-make 使用"MinGW Makefiles"生成器跟踪 CMAKE 无法将可执行文件链接到对象库
- C 复合赋值运算符 ^= 平均值