当并非总是需要所有模板参数时,如何解决c ++模板问题?

时间:2019-04-12 20:09:37

标签: c++ c++11 templates constructor arduino

我正在尝试为Arduino创建我的第一个库。它应该以2D和3D绘制并存储不同的轴。该函数只能接受uint和int数据类型的数组,不能接受浮点数。尝试此操作时,我遇到以下问题:

Visual Studio代码在构造函数中通知我“不是有效的模板类”。我无法编译此代码,也不知道如何继续...:(

这是我当前的代码:

Axis_types.h

template<typename T, typename = typename std::enable_if<std::is_integral<T>::value>::type>
struct Axis_Data_X_t
{
    const T x;
};

template<typename T, typename = typename std::enable_if<std::is_integral<T>::value>::type>
struct Axis_Data_Y_t
{
    const T y;
};

template<typename T, typename = typename std::enable_if<std::is_integral<T>::value>::type>
struct Axis_Data_Z_t
{
    const T z;
};

使用第二个模板参数来确定是否仅使用单位或整数。浮点值将导致编译问题。这正在按预期方式工作。

Axis.h

template<typename T1, typename T2, typename T3 = void>
class Axis
{
    public:
        // Contructor
        Axis(const Axis_Data_X_t<T1> *inDataX, const Axis_Data_Y_t<T2> *inDataY);
        Axis(const Axis_Data_X_t<T1> *inDataX, const Axis_Data_Y_t<T2> *inDataY, const Axis_Data_Z_t<T3> *inDataZ);

    private:
        // Variables
        // Main variables
        LUT_Data_X_t<T1> _DataX;
        LUT_Data_Y_t<T2> _DataY;
        LUT_Data_Z_t<T3> _DataZ;
};

Axis.cpp

template<typename T1, typename T2>
Axis<uint8_t,uint8_t>::Axis(const Axis_Data_X_t<T1> *inDataX, const Axis_Data_Y_t<T2> *inDataY)
{
     _DataX = *inDataX;
     _DataY = *inDataY;
}

我最喜欢的是为每个模板数据类型仅实现一次构造函数。

我该如何实现?

感谢您的帮助!

0 个答案:

没有答案