为模板化类创建类型别名

pur*_*rga 9 c++

而不是使用

std::vector<Object> ObjectArray;
Run Code Online (Sandbox Code Playgroud)

我希望它是

MyArray<Object> ObjectArray;
Run Code Online (Sandbox Code Playgroud)

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

但是,使用

typedef std::vector MyArray;
Run Code Online (Sandbox Code Playgroud)

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

Tho*_*mas 14

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

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

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

My<Object>::Array ObjectArray
Run Code Online (Sandbox Code Playgroud)

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


Rya*_*ing 8

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

template <typename T>
using MyArray = std::vector<T>;
Run Code Online (Sandbox Code Playgroud)

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

template <typename... Ts>
using MyArray = std::vector<Ts...>;
Run Code Online (Sandbox Code Playgroud)


ker*_*aba 5

其他方式:

#include <vector>

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

void func()
{
    MyArray<int> my;

    my.push_back(5);

    MyArray<int>::iterator i;
}
Run Code Online (Sandbox Code Playgroud)

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