“template<class T> using owner = T;”是什么?

6
下面摘自微软的库中的文件(https://github.com/microsoft/gsl):
namespace gsl
{
    //
    // GSL.owner: ownership pointers 
    //
    using std::unique_ptr;
    using std::shared_ptr;

    template<class T>
    using owner = T;
    ...
};

我不理解以下别名模板的意思:
```c++ template using ptr = T*; ```
该模板定义了一个指针别名模板,可以将任何类型的指针声明为 `ptr`。例如 `int*` 可以被声明为 `ptr`。
template<class T>
using owner = T;

有什么需要解释的吗?


1
可能是What is the difference between 'typedef' and 'using' in C++11?的一份重复问题。 - Qix - MONICA WAS MISTREATED
2个回答

7
这意味着对于每个 Towner<T> 都是 T 的别名。

难道不是 owner 是 T 的别名,而不是 owner<T>? - West
3
@West,不,owner是一个模板(template),“T”是一个类型(type)。 - chris
是的,我在这个问题上非常错误。对于像我这样的人,这段代码可以编译通过:static_assert(is_same<int,owner<int>>(),"hello"); - West

2

它可以用作注释,以显示哪些指针是“所有者”,即:

非所有权原始指针示例

template<typename T>
class X2 {
    // ...
public:
    owner<T*> p;  // OK: p is owning
    T* q;         // OK: q is not owning
};

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接