的unique_ptr有一个选项来采取数组类型 - 以具有正确的删除器(与数组中删除[])后:类型模板特(的unique_ptr数组类型)
std::unique_ptr<std::string[]> up(new std::string[10]); // OK
的unique_ptr类本身的定义包括这种类型的专业化(注意定义本身邻近T []括号):
template<typename T, typename D>
class unique_ptr<T[], D> { ... }
,但不是它的字符串[]或INT []本身类型 所以应该模板到T型根据def因为不是T []? 换句话说,模板引擎在T和T []之间有什么区别?(如果我们只是用T代替string [] - T []专精应该给我们string [] []类型,或者它不应该是? 只是typedef int []为array_to_int类型wouldnt T []替换为array_to_int []类型(即int [] []类型)?
换句话说,我们明确地将std :: string [] TYPE传递给template in ?这里 std::unique_ptr<std::string[]>
,它应该被取代为T本身,右不T []
但为什么提供的类型(比如说int [])本身不能替代T?即为什么它是替代T + [] – barney
@ barney这可能有助于将局部特化看作模式匹配。你不提供参数给部分专业化;相反,如果提供给主模板的参数匹配模式,将会使用它。 –
@ T.C。所以当我写部分专业化和扩展类型T与[]或*或任何 - 它宁愿审查它作为模式匹配/我的类型本身的元素?因此T []不是[]对T的加法? (什么混淆了我在其他语言的部分,我实际上可以添加一些东西到我的类型:\t '模板使用UniquePtr = std :: unique_ptr ;'将取代我原来的'UniquePtr 'to'std :: unique_ptr '有效地向类型 –
barney