模板的简单示例

ale*_*vas 3 c++ templates

这是一个简单的问题,我确信它已经得到了回答,但我似乎无法找到一个好的答案.

我有一个班,点:

template<class T>
Point{
\\code
}
Run Code Online (Sandbox Code Playgroud)

...现在我想要一个点向量,其中一些有T作为整数,其中T为双精度.我想写点类似的东西

template<class T>
std::vector<Point<T> > points;
Run Code Online (Sandbox Code Playgroud)

但是,唉,这不会编译错误"预期'模板'之前的primary-expression'".我无法使用此代码进行操作以使其正常工作.另外相关的是点在主类中,所以我不能在模板外面粘贴模板声明.

如果有人能指导我解决问题,我会非常感激.

谢谢.

ere*_*eOn 5

如果您的目标是vector拥有两者Point<int>并且Point<double>您可以使用Boost Variant.

typedef boost::variant<Point<int>, Point<double> > VariantPoint;
Run Code Online (Sandbox Code Playgroud)

然后:

std::vector<VariantPoint> my_vector;

my_vector.push_back(Point<int>(1, 0));
my_vector.push_back(Point<double>(1.5f, 2.0f));
Run Code Online (Sandbox Code Playgroud)

将工作.请注意,要在之后检查元素,您可能必须使用此处记录的访问者模式.

如果你的目标是拥有只能容纳一种类型的不同矢量类型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;
Run Code Online (Sandbox Code Playgroud)

或者,如果C++ 11不是一个选项:

template<typename T> struct PointVector
{
  typedef std::vector<Point<T> > Type;
}
Run Code Online (Sandbox Code Playgroud)

然后:

PointVector<int>::Type my_vector;
Run Code Online (Sandbox Code Playgroud)