c++ - 模板乘法函数
问题描述
我想创建一个通用函数,它将采用任何数据类型的两个参数(尽管它们总是某种数字),然后将它们相乘,将它们四舍五入,并将它们的值作为整数返回。
我创建了一个模板函数,但我想要一些关于该函数的反馈。它是否适用于包含 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,但如果参数是小数、浮点、整数、长、短等的参数......它应该仍然能够按预期工作。
解决方案
功能层的标志是什么?您相信编译器会知道如何隐式转换 T * T 的结果。这是第一个问题。
其次,您需要知道 T 是否支持运算符“*”。有关详细信息,请参见此处: 是否可以编写模板来检查函数的存在? 以及 如何检查 operator== 是否存在?
推荐阅读
- python - 如何为给定的 secp256r1 私钥生成 ECIES 公钥
- arrays - 将两列与熊猫进行比较时对数据框进行子集化
- javascript - 在 javaScript 中从数组的多个值创建一个字符串
- c# - 如何在c#ef中将一个表的数据上传到另一个表的单行?
- django - Django + Bootstrap 模态表单仍然显示 Django 的默认错误,而不是引导错误?
- docker - 很少有测试失败只有 docker 实例
- applescript - Applescript 没有文件的写权限
- android - Jetpack Compose:如果动画滚动被中断并启动一个新项目,则 LazyColumn 不会渲染某些项目
- grafana - 将数据点写入 InfluxDB2
- c++ - 在哪些情况下 std::dynamic_pointer_cast 失败?