我正在尝试为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;
}
我最喜欢的是为每个模板数据类型仅实现一次构造函数。
我该如何实现?
感谢您的帮助!