这是一个简单的问题,我确信它已经得到了回答,但我似乎无法找到一个好的答案.
我有一个班,点:
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'".我无法使用此代码进行操作以使其正常工作.另外相关的是点在主类中,所以我不能在模板外面粘贴模板声明.
如果有人能指导我解决问题,我会非常感激.
谢谢.
如果您的目标是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)
| 归档时间: |
|
| 查看次数: |
1668 次 |
| 最近记录: |