Специализация std::hash с параметрами шаблонаC++

Программы на C++. Форум разработчиков
Ответить Пред. темаСлед. тема
Anonymous
 Специализация std::hash с параметрами шаблона

Сообщение Anonymous »

У меня есть следующая шаблонная структура данных

Код: Выделить всё

#include 
#include 
#include 
#include 

constexpr bool is_base_2(uint64_t number){
return (number != 1) && ((number & (number - 1)) == 0);
}

constexpr uint64_t power(uint64_t number, uint8_t index){
uint64_t current{number};
for(uint8_t i{1}; i 
class fixed{

friend struct std::hash;

public:

template <
typename Number,
typename std::enable_if_t = 0>
fixed(const Number& number){
static_assert(
std::is_signed_v ? is_signed : true,
"cannot create unsigned fixed-point from signed arithmetic type"
);
data = number * scaling_factor_inverse;
}

fixed( const fixed & ) = default;

template<
typename Number,
typename = typename std::enable_if_t
>
operator Number() const
{
static_assert(
std::is_unsigned_v ? !is_signed : true,
"cannot convert signed fixed-point to an unsigned arithmetic type"
);
return
static_cast(
static_cast(data) /
static_cast(scaling_factor_inverse)
)
;
}

private:

UnderlyingIntegerType data;
fixed() = default;

};

template
struct std::hash{
std::size_t operator()(fixed number) const {
static std::hash hasher{};
return hasher(number.data);
}
};
Я пытаюсь создать специализацию std::hash для этого класса следующим образом:

Код: Выделить всё

template
struct std::hash{
std::size_t operator()(fixed number) const {
static std::hash hasher{};
return hasher(number.data);
}
};
но я получаю сообщение об ошибке компиляции

Код: Выделить всё

error: expected parameter declarator
std::size_t operator()(fixed number) const {
^
src/main/util/fixed_point.h:181:74: error: expected ')'
std::size_t operator()(fixed number) const {
^
Мне не удалось определить причину этой проблемы, я был бы признателен, если бы кто-нибудь указал мне правильное направление.
Пожалуйста, будьте осторожны. нежен со мной.
Я пытался заменить

Код: Выделить всё

    std::size_t operator()(fixed number) const {
но я думаю, что это может вызвать проблемы где-то еще (я не уверен?).

Подробнее здесь: https://stackoverflow.com/questions/785 ... parameters
Реклама
Ответить Пред. темаСлед. тема

Быстрый ответ

Изменение регистра текста: 
Смайлики
:) :( :oops: :roll: :wink: :muza: :clever: :sorry: :angel: :read: *x)
Ещё смайлики…
   
К этому ответу прикреплено по крайней мере одно вложение.

Если вы не хотите добавлять вложения, оставьте поля пустыми.

Максимально разрешённый размер вложения: 15 МБ.

  • Похожие темы
    Ответы
    Просмотры
    Последнее сообщение

Вернуться в «C++»