[英]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.