繁体   English   中英

为模板化类创建类型别名

[英]Creating a type alias for a templated class

而不是使用

std::vector<Object> ObjectArray;

我希望它是

MyArray<Object> ObjectArray;

保留所有std :: vector方法。 (比如push_back(),reserve(),...等)

但是,使用

typedef std::vector MyArray;

不行。 我应该使用模板吗? 怎么样?

你真正想要的是模板化的typedef。 不幸的是,当前版本的C ++不支持这些,但它们将在C ++ 0x中添加。

目前,这是一个可能的解决方法:

template<class T> struct My {
    typedef std::vector<T> Array;
};

My<Object>::Array ObjectArray

无论这是否比直接使用std::vector更好,我会留给你决定。

从C ++ 11开始,您可以使用模板化类型别名

template <typename T>
using MyArray = std::vector<T>;

如果你想更通用,你可以使用一个可变参数模板(在矢量的情况下允许分配器,而不必具体)

template <typename... Ts>
using MyArray = std::vector<Ts...>;

其他方式:

#include <vector>

template <typename T>
struct MyArray
    :std::vector<T>
{
};

void func()
{
    MyArray<int> my;

    my.push_back(5);

    MyArray<int>::iterator i;
}

为我编译,但你可能会发现vector <>中的某些东西需要“拉上”到MyArray中。

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM