В принципе, я хотел бы использовать тип float16
. Но этот вопрос заключается не в деталях, как это сделать, а в том, как настроить вещи так, чтобы мой новый тип float16 вел себя правильно с помощью float, double и всех целых типов.
Я бы хотел, чтобы мой тип float16
преобразовывался аналогично, чтобы плавать или удваивать. Например, он должен неявно использовать оба этих типа. Он также должен иметь std:: common_type (http://en.cppreference.com/w/cpp/types/common_type), который ведет себя аналогично для него, поскольку он std:: common_types ведет себя для других типов float. Это означает, что std::common_type<my_float16, float>::type = float
, std::common_type<my_float16, double>::type = double
и std::common_type<my_float16, T>::type = my_float16
, где T
- любой целочисленный тип.
Какие конструкторы и операторы литья нужно написать, чтобы сделать эту работу? Любая помощь будет оценена!
Мой другой недавний вопрос может быть связан.
EDIT: Хорошо, я построил минимальный пример, подобный Антону.
struct float16 {
explicit operator int() {
return 0;
}
operator float() {
return 0.0f;
}
};
Это имеет правильный общий тип для float и float16, но общий тип для int и float16 по-прежнему int. Я этого не понимаю.