Функция умножения шаблонов - PullRequest
0 голосов
/ 28 июня 2019

Я хотел бы создать общую функцию, которая будет принимать два параметра любого типа данных (хотя они всегда будут своего рода числом), а затем умножать их вместе, округлять их и возвращать их значение как целое число.

Я создал шаблонную функцию, но я хотел бы получить отзыв об этой функции.Будет ли он работать во всех случаях со значениями, содержащими short, int, float, decimal и т. Д.?Если нет, то как я могу изменить это, чтобы сделать это?

// Header File
class MathFunctions
{
public:
   template<typename A, typename B>
   static int MultiplyToInt(
      const A const& base,
      const B const& multiplier);
};

// CPP File
#include "MathFunctions.h"

template<typename A, typename B>
int MathFunctions::MultiplyToInt(
   const A const& base,
   const B const& multiplier)
{
   return static_cast<int>(floor(base * multiplier));
}

// Sample code to run the function
float value = 0.82;
const int result = MathFunctions::MultiplyToInt<int, float>(10, value);

Результат должен содержать значение 8, но если параметры были десятичными, float, int, long, short и т. Д. ... itвсе еще должен быть в состоянии работать как ожидалось.

1 Ответ

0 голосов
/ 28 июня 2019

Какая подпись функционального этажа?Вы полагаете, что компилятор будет знать, как неявно приводить результаты T * T. Это первая проблема.

Во-вторых, вам нужно будет знать, поддерживает ли T оператор '*'.Подробнее об этом см. Здесь: Можно ли написать шаблон для проверки существования функции? и Как проверить, существует ли оператор ==?

...