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

C++ template/aliasing - Type/value mismatch at argument 1 in template parameter list

本文关键字:参数 类型 不匹配 列表 别名 C++ 模板      更新时间:2023-10-16

我在模板化类中弄脏了脚,并且无法编译以下代码:

template <class T> using item_ptr = std::shared_ptr<T>;
class Container
{
std::vector<item_ptr> list;
};

我得到两个编译错误,a type-value mismatch at argument 1 in template parameter list,和一个template argument 2 is invalid.但是,如果我编写以下代码:

template <class T> //using item_ptr = std::shared_ptr<T>;
class Container
{
std::vector<std::shared_ptr<T>> list;
};

然后它编译没有错误。根据我的理解,这两种说法应该做同样的事情。我理解不对什么?

template <class T> using item_ptr = std::shared_ptr<T>;
template <class T> class Container
{
std::vector<item_ptr<T>> list;
};

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

template<class T>
class Container
{    
using item_ptr = std::shared_ptr<T>;        
std::vector<item_ptr> list;  

};