如果您的目标是同时vector
拥有两者Point<int>
,Point<double>
那么您可以使用Boost Variant。
typedef boost::variant<Point<int>, Point<double> > VariantPoint;
然后:
std::vector<VariantPoint> my_vector;
my_vector.push_back(Point<int>(1, 0));
my_vector.push_back(Point<double>(1.5f, 2.0f));
将工作。请注意,要在之后检查元素,您可能必须使用此处记录的访问者模式。
如果您的目标是拥有只能包含一种类型的不同向量类型Point
,那么您可以使用:
template<typename T> using PointVector = std::vector<Point<T>>; // C++11
// Now you can write:
PointVector<int> my_vector;
// Which is equivalent to:
std::vector<Point<int>> my_vector;
或者,如果 C++11 不是一个选项:
template<typename T> struct PointVector
{
typedef std::vector<Point<T> > Type;
}
然后:
PointVector<int>::Type my_vector;