区分模板中的浮点类型与整数

麦可

我想对几种整数类型(16、32、64位)和浮点类型(float,double,long double)执行相似但不完全相同的计算。大部分代码是相同的,但是对于int和float来说,有些部分需要做不同的处理。例如,比较int可以使用a == b完成,而比较浮点数则可以使用abs(ab)完成

做到这一点的一种方法是将ints和float之间不同的代码部分隔离为小函数,并针对每种类型专门设计模板。但是,我不想为每种整数类型复制粘贴相同的代码,而为每种浮点类型复制粘贴其他代码。因此,问题就来了:是否可以一次专门针对多种类型的模板函数?如果合法,则在语义上类似于以下内容:

template<>
bool isEqual< short OR long OR long long >( T a, T b ) { 
    return a == b;
}

template<>
bool isEqual< float OR double OR long double >( T a, T b ) { 
    return abs( a - b ) < epsilon;
}
埃尔伯斯说恢复莫妮卡

在C ++ 11中,可以使用类型traits查看std::enable_if文档就您而言,它可能看起来像这样:

功能参数特化:

template<class T>
bool isEqual(T a, T b, typename std::enable_if<std::is_integral<T>::value >::type* = 0) 
{
    return a == b;
}

template<class T>
bool isEqual(T a, T b, typename std::enable_if<std::is_floating_point<T>::value >::type* = 0) 
{
    return abs( a - b ) < epsilon;
}

返回类型专长:

template<class T>
typename std::enable_if<std::is_integral<T>::value, bool >::type isEqual(T a, T b)

{
    return a == b;
}

template<class T>
typename std::enable_if<std::is_floating_point<T>::value, bool >::type isEqual(T a, T b)
{
    return abs( a - b ) < epsilon;
}

本文收集自互联网,转载请注明来源。

如有侵权,请联系[email protected] 删除。

编辑于
0

我来说两句

0条评论
登录后参与评论

相关文章

来自分类Dev

如何分别专门针对整数和浮点类型的模板函数?

来自分类Dev

Python中的整数/浮点类型错误

来自分类Dev

如何区分存储在模板化类中的类型

来自分类Dev

获取C中浮点类型变量的整数表示值

来自分类Dev

如何对多种数据类型(字符串,整数,浮点数)使用模板?

来自分类Dev

GLhalf 是浮点类型还是整数?

来自分类Dev

C ++模板中的类型优先级和整数类型

来自分类Dev

C ++模板中的类型优先级和整数类型

来自分类Dev

模板参数中的相同长度的相同符号整数类型

来自分类Dev

C ++:默认在模板函数中初始化整数类型

来自分类Dev

模板类型推导:按typedef区分

来自分类Dev

如何根据模板类型定义浮点常量?

来自分类Dev

浮点运算中的整数转换

来自分类Dev

Ruby中的浮点整数

来自分类Dev

在c ++中,可以将浮点类型加1的最大整数是多少?

来自分类Dev

如何在 Python 的字典列表中更改值类型(从浮点数到整数)?

来自分类Dev

如何从模板类型数组获取整数类型

来自分类Dev

区分 Django 中的“帐户类型”

来自分类Dev

检查因子变量是整数类型还是浮点类型

来自分类Dev

类型错误:不能用浮点类型的非整数乘以序列

来自分类Dev

如何比较 django 模板中的浮点变量?

来自分类Dev

类型错误:不能将序列乘以“浮点”类型的非整数 - 转换为浮点后

来自分类Dev

MIPS中浮点加法的整数实现

来自分类Dev

Java 中的意外结果(浮点到整数)

来自分类Dev

变量中的模板类型

来自分类Dev

整数和实数类型的不同模板行为

来自分类Dev

将浮点数与Python中的函数相乘,并且无法将序列乘以'float'类型的非整数

来自分类Dev

将浮点数与Python中的函数相乘,并且无法将序列乘以'float'类型的非整数

来自分类Dev

如何在模板函数中为整数类型选择snprinf掩码?

Related 相关文章

  1. 1

    如何分别专门针对整数和浮点类型的模板函数?

  2. 2

    Python中的整数/浮点类型错误

  3. 3

    如何区分存储在模板化类中的类型

  4. 4

    获取C中浮点类型变量的整数表示值

  5. 5

    如何对多种数据类型(字符串,整数,浮点数)使用模板?

  6. 6

    GLhalf 是浮点类型还是整数?

  7. 7

    C ++模板中的类型优先级和整数类型

  8. 8

    C ++模板中的类型优先级和整数类型

  9. 9

    模板参数中的相同长度的相同符号整数类型

  10. 10

    C ++:默认在模板函数中初始化整数类型

  11. 11

    模板类型推导:按typedef区分

  12. 12

    如何根据模板类型定义浮点常量?

  13. 13

    浮点运算中的整数转换

  14. 14

    Ruby中的浮点整数

  15. 15

    在c ++中,可以将浮点类型加1的最大整数是多少?

  16. 16

    如何在 Python 的字典列表中更改值类型(从浮点数到整数)?

  17. 17

    如何从模板类型数组获取整数类型

  18. 18

    区分 Django 中的“帐户类型”

  19. 19

    检查因子变量是整数类型还是浮点类型

  20. 20

    类型错误:不能用浮点类型的非整数乘以序列

  21. 21

    如何比较 django 模板中的浮点变量?

  22. 22

    类型错误:不能将序列乘以“浮点”类型的非整数 - 转换为浮点后

  23. 23

    MIPS中浮点加法的整数实现

  24. 24

    Java 中的意外结果(浮点到整数)

  25. 25

    变量中的模板类型

  26. 26

    整数和实数类型的不同模板行为

  27. 27

    将浮点数与Python中的函数相乘,并且无法将序列乘以'float'类型的非整数

  28. 28

    将浮点数与Python中的函数相乘,并且无法将序列乘以'float'类型的非整数

  29. 29

    如何在模板函数中为整数类型选择snprinf掩码?

热门标签

归档