У меня есть класс, который представляет число с фиксированной точкой, используя P общее количество бит и F число дробных битов (оставляя целые биты PF-1, один бит зарезервирован как знаковый бит):Вывести тип возвращаемого аргумента из аргументов шаблона
#include <bitset>
// Fixed point class
// P : Total number of bits
// F : Number of fractional bits
namespace FPUtils {
template <unsigned P, unsigned F> class MyFPClass {
public:
MyFPClass(std::string b="") : m_bits(b) { value = m_bits.to_ulong(); }
private:
unsigned int value;
std::bitset<P> m_bits;
};
}
Теперь я хотел бы иметь возможность добавить два объекта MyFPClass с различным количеством аргументов шаблона и использовать максимально возможное разрешение в результате. Единственное решение, которое я нашел это:
template<unsigned X, unsigned Y, unsigned X1, unsigned Y1,
unsigned X2, unsigned Y2> MyFPClass<X,Y>
add(const MyFPClass<X1,Y1>& a, const MyFPClass<X2,Y2>& b){
std::cout << "In add" << std::endl;
}
Что я могу использовать, как это:
int main(){
MyFPClass<9,7> a("101000110"); // has 1 integer bit
MyFPClass<10,6> b("0111000110"); // has 3 integer bits
MyFPClass<11,7> c; // has 3 integer bits, 7 fractional bits, 1 sign bit
c = FPUtils::add<11,7,9,7,10,6>(a,b);
// How can I derive the input type directly from the input parameter, so that I can do e.g. :
// MyFPClass<9,7> c(a + b);
// or
//MyFPClass<9,7> c = a + b;
}
Как я могу определить, например, функция operator+(const MyFPClass<P1,F1>& a, const MyFPClass<P2,F2>& b)
где P1, F1, P2, F2 получены из входных параметров a и b?
Что такое формула для 'P' выходного в и 'F' на основе входов' 'P' и 'F's? – Angew
Что такое downvotes? Вопрос гораздо яснее и гораздо более согласован, чем большинство первых вопросов. – Angew
исправить 'l1a' и' l1b'. также 'l1d' vs' c', и не смешивать в 'operator +' в вопросе, это действительно не актуально. –