0
我有以下直方图类的构造函数:接口作为模板参数
Histogram(float start, float end, float bin_size, std::vector<BinnableObject<T>*>* data);
而继接口
template<typename T>
class BinnableObject
{
public:
virtual T getBinnableObject() = 0;
};
我有一个类Ring
实现此接口
template<class T>
class Ring : BinnableObject<T>
{
public:
Ring(Point<T> c, T r)
{
m_center = c;
m_radius = r;
}
Point<T> m_center;
T m_radius;
T getBinnableObject()
{
return m_radius;
}
};
有我可以使用Rings矢量调用直方图构造函数吗?
Histogram<float> h(0.0f, 1.0f, 0.1f, &data.m_rings);
其中&data.m_rings
是std::vector<Ring<float>*>
下面
#include <vector>
template<typename T>
class BinnableObject
{
public:
virtual T getBinnableObject() = 0;
};
template<class T>
class Ring : public BinnableObject<T>
{
public:
T m_radius;
T getBinnableObject()
{
return m_radius;
}
};
template <typename T>
class Histogram
{
public:
Histogram(float start, float end, float bin_size, std::vector<BinnableObject<T> >* data) {};
};
int main()
{
std::vector<Ring<float>*> rings;
Histogram<float> h(0.0f, 1.0f, 0.1f, &rings);
}
尝试调用没有明确说明类型参数,因为'疯牛病::直方图'是一个模板类,我以为'Histrogram'不是。 MCVE在这里会很有帮助。 –
Gasper
不需要。只要将构造函数作为模板,不要传递向量,像每个好公民一样传递一对迭代器。当然,避免生鱼指针。 –