C++ C++;模板/别名-模板参数列表中参数1处的类型/值不匹配

C++ C++;模板/别名-模板参数列表中参数1处的类型/值不匹配,c++,templates,aliasing,C++,Templates,Aliasing,我对模板化类中的别名感到困惑,无法编译以下代码: template <class T> using item_ptr = std::shared_ptr<T>; class Container { std::vector<item_ptr> list; }; 然后,它编译时不会出错。根据我的理解,这两种说法应该是一样的。我没有正确理解什么?使用item\u ptr=std::shared\u ptr的模板; 模板类容器 { std::向量表; };

我对模板化类中的别名感到困惑,无法编译以下代码:

template <class T> using item_ptr = std::shared_ptr<T>;
class Container
{
    std::vector<item_ptr> list;
};
然后,它编译时不会出错。根据我的理解,这两种说法应该是一样的。我没有正确理解什么?

使用item\u ptr=std::shared\u ptr的模板;
模板类容器
{
std::向量表;
};

如果要在类中使用别名,请在类中定义:

template<class T>
class Container
{    
     using item_ptr = std::shared_ptr<T>;        
     std::vector<item_ptr> list;  
   
};
模板
类容器
{    
使用item_ptr=std::shared_ptr;
std::向量表;
};

投票以打字错误结束
item_ptr
仍然是一个模板,因此您需要
item_ptr
就像您使用
shared_ptr
一样“根据我的理解,这两个语句应该做相同的事情。”-那么为什么您使用它们不同呢?您向
std::shared_ptr
提供模板参数,但不向
item_ptr
;)如果您不告诉编译器,编译器怎么可能知道您要在
容器中实例化的
项的类型?我不知道这是一个打字错误,但它确实是一个thinko。你的意思可能是像使用item_ptr=std::shared_ptr
这样的
吗?@下划线d现在不是
item_ptr
只是一个
shared_ptr
对象?因此,
项\u ptr
是否只能是
t
类型?@JaromAllen
模板
仅适用于使用
别名声明的
。它不适用于
容器
。并不是说即使
容器
确实有
模板
行,也只有
向量
是有效的。它们都需要这些参数,并且别名的使用必须提供所需的任何模板参数@比尔已经展示了这个
template<class T>
class Container
{    
     using item_ptr = std::shared_ptr<T>;        
     std::vector<item_ptr> list;  
   
};