我有以下直方图类的构造函数:
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>*>
下方的MCVE
#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);
}
最佳答案
您遇到的问题与以下事实有关:std::vector<Ring<T>>
与std::vector<BinnableObject<T>>
毫无关系,无论Ring
是从BinnableObject
继承的。
但是,您能否将直方图设为模板化函数/构造函数?
即
template<class T>
Histogram(float, float, float, std::vector<T>);
关于c++ - 接口(interface)作为模板参数,我们在Stack Overflow上找到一个类似的问题:https://stackoverflow.com/questions/43193428/