Как исправить проблемы с шаблоном c ++, когда не все параметры шаблона нужны всегда? - PullRequest
0 голосов
/ 12 апреля 2019

Я пытаюсь сделать свою первую библиотеку для 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;
}

Мой любимый вариант - реализовать конструктор для каждого типа данных шаблона только один раз.

Как этого добиться?

Спасибо за вашу помощь!!!

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...