如果您的目标是拥有一个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));
会工作。请注意,为了后续检查元素,您可能必须使用visitor pattern,如here所述。
如果你的目标是有一个只能容纳一种类型的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;
一个向量只能存放一种类型的元素。所以你可以选择点或点但你不能混合它们。 –
不应该只是'std :: vector> points'? –
knittl
你想要一个模板化的'typedef'吗? – ereOn