我有以下直方图类的构造函数:

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_ringsstd::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/

10-13 08:12