Я пишу библиотеку для поддержки типа целых чисел, которые имеют два параметра шаблона INT_BITS
и FRAC_BITS
. Мне удалось написать функцию преобразования для преобразования различных типов классов из одного в другой [которые меняются в значениях INT_BITS
и FRAC_BITS
]. Но когда я пытаюсь использовать его при перегрузке оператора присваивания, он не работает. Пожалуйста, предложите мне способ его реализации. Я прошел через ссылки herehere и here, но ни одно из решений, похоже, не работает.Оператор перегрузки Назначение в классе шаблона
Определение класса:
template<int INT_BITS, int FRAC_BITS>
struct fp_int
{
public:
static const int BIT_LENGTH = INT_BITS + FRAC_BITS;
static const int FRAC_BITS_LENGTH = FRAC_BITS;
private:
ValueType stored_val;
};
Определение функции преобразования:
template <int INT_BITS_NEW, int FRAC_BITS_NEW>
fp_int<INT_BITS_NEW, FRAC_BITS_NEW> convert() const
{
typedef typename fp_int<INT_BITS_NEW, FRAC_BITS_NEW>::ValueType TargetValueType;
return fp_int<INT_BITS_NEW, FRAC_BITS_NEW>::createRaw(
CONVERT_FIXED_POINT<
ValueType,
TargetValueType,
(FRAC_BITS_NEW - FRAC_BITS),
(FRAC_BITS_NEW > FRAC_BITS)
>:: exec(stored_val));
}
Определение оператора идет как:
template <int INT_BITS_NEW, int FRAC_BITS_NEW>
fp_int<INT_BITS_NEW, FRAC_BITS_NEW>
operator =(fp_int<INT_BITS,FRAC_BITS> value) const
{
fp_int<INT_BITS_NEW,FRAC_BITS_NEW> a = value.convert<INT_BITS_NEW,FRAC_BITS_NEW>();
return a;
}
Когда я пытаюсь это работает:
fp_int<8,8> a = 12.4;
fp_int<4,4> b = a.convert<4,4>();
Но когда я пытаюсь это он показывает ошибку преобразования типа:
fp_int<8,8> a = 12.4;
fp_int<4,4> b;
b = a;
Пожалуйста, скажите мне, где я неправильно.
Операторы присваивания обычно должны принимать свой аргумент * по ссылке *. Кроме того, вы не * назначаете * в свой оператор присваивания, то есть вы не изменяете левый операнд. Это удивительно: это не соответствует поведению встроенного назначения. – dyp
предоставьте [MCVE] (http://stackoverflow.com/help/mcve). –
@ м.с. Пожалуйста, найдите файл в [repo_link] (https://github.com/coder-mike/FixedPoint/blob/master/fixed_point.hpp) –