Я пытаюсь сделать свою первую библиотеку для 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;
}
Мой любимый вариант - реализовать конструктор для каждого типа данных шаблона только один раз.
Как этого добиться?
Спасибо за вашу помощь!!!