模板乘法功能

时间:2019-06-27 22:28:14

标签: c++ floating-point rounding

我想制作一个通用函数,该函数将接受任何数据类型的两个参数(尽管它们始终是某种数字),然后将它们相乘,舍入并以整数形式返回它们的值。

我已经创建了一个模板函数,但是我希望获得有关该函数的一些反馈。在包含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,但如果参数是小数,浮点数,整数,长整型,短整型等参数,它仍应能够按预期工作。

1 个答案:

答案 0 :(得分:0)

多功能厅的签名是什么?您相信编译器将知道如何隐式转换T * T的结果。这是第一个问题。

第二,您需要知道T是否支持运算符'*'。有关详情,请参见此处:  Is it possible to write a template to check for a function's existence?How to check whether operator== exists?