首页 > 解决方案 > 模板乘法函数

问题描述

我想创建一个通用函数,它将采用任何数据类型的两个参数(尽管它们总是某种数字),然后将它们相乘,将它们四舍五入,并将它们的值作为整数返回。

我创建了一个模板函数,但我想要一些关于该函数的反馈。它是否适用于包含 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,但如果参数是小数、浮点、整数、长、短等的参数......它应该仍然能够按预期工作。

标签: c++floating-pointrounding

解决方案


功能层的标志是什么?您相信编译器会知道如何隐式转换 T * T 的结果。这是第一个问题。

其次,您需要知道 T 是否支持运算符“*”。有关详细信息,请参见此处: 是否可以编写模板来检查函数的存在? 以及 如何检查 operator== 是否存在?


推荐阅读