Как подобрать нулевое значение для базовых типов в шаблоне?

97
05 февраля 2022, 12:20

Как подобрать значение для базовых типов int32_t, int8_t и т.д. для шаблонного класса?

Т.е. что бы в методе const bool is_empty() const noexcept; возвращалась проверка что оба поля равны нулю, .0f, 0ui32, 0i32 и т.д.

Или можно как-то в шаблон передать значение для сравнения?

template <typename __type>
class point_base
{
    point_base() noexcept;
    virtual ~point_base() noexcept;
    point_base(point_base const&) noexcept;
    point_base(point_base&&) noexcept;
    point_base& operator=(point_base const&) noexcept;
    point_base& operator=(point_base&&) noexcept;
    const __type x() const noexcept;
    const __type y() const noexcept;
    void set_x(const __type x) noexcept;
    void set_y(const __type y) noexcept;
    const bool is_empty() const noexcept;
protected:
    __type m_x_;
    __type m_y_;
};
template<typename __type>
inline point_base<__type>::point_base() noexcept :
    m_x_{},
    m_y_{} {}
template<typename __type>
inline point_base<__type>::~point_base() noexcept = default;
template<typename __type>
inline point_base<__type>::point_base(point_base const&) noexcept = default;
template<typename __type>
inline point_base<__type>::point_base(point_base&&) noexcept = default;
template<typename __type>
inline point_base<__type>& point_base<__type>::operator=(point_base const&) noexcept = default;
template<typename __type>
inline point_base<__type>& point_base<__type>::operator=(point_base&&) noexcept = default;
template<typename __type>
inline const __type point_base<__type>::x() const noexcept
{
    return m_x_;
}
template<typename __type>
inline const __type point_base<__type>::y() const noexcept
{
    return m_y_;
}
template<typename __type>
inline void point_base<__type>::set_x(const __type x) noexcept
{
    m_x_ = x;
}
template<typename __type>
inline void point_base<__type>::set_y(const __type y) noexcept
{
    m_y_ = y;
}
template<typename __type>
inline const bool point_base<__type>::is_empty() const noexcept
{
    // выполнить проверку что значение нулевое
}
Answer 1

Вам нужна инициализация значением?

template<typename T>
    struct Test
{
    Test():t{} {}
    T t;
    void out() { cout << t << endl; }
};
int main(int argc, const char * argv[])
{
    Test<double>().out();
    Test<bool>().out();
    Test<int>().out();
}
READ ALSO
Winapi: SetWindowLong и GetWindowLong возвращают неправильное значение

Winapi: SetWindowLong и GetWindowLong возвращают неправильное значение

Кусочек инициализации окна в конструкторе собственного класса:

78
Вывод слова если в нем есть цифра

Вывод слова если в нем есть цифра

Как вывести из строки слова в которых есть цифра?

79
Работа с массивами C++

Работа с массивами C++

Подскажите пожалуйста как сформировать массив положительных из уже существующего массива ,как именно работать с размерностью нового массива,если...

81
С++ оптимизировать вложенный цикл

С++ оптимизировать вложенный цикл

Суть задания: есть список покупок по днямСписок является вектором векторов

90