【发布时间】:2018-01-24 23:20:47
【问题描述】:
我想编写只在类型为整数时调用的模板函数,例如 int8, int16, int32, int64, uint8, uint16, uint32, uint64;以及另一个具有不同代码的模板函数(同名),仅适用于 FLOAT 类型 float32、float64 ... 无论如何可以使用 C++ 中的模板函数来完成它? 例如:
template <class T>
void fun(T b)
{
/// Code for integer type
}
template <class S>
void fun(S a)
{
/// Code for floating type
}
【问题讨论】:
-
相关,但有更好读的技术:stackoverflow.com/q/19985160/1896169
-
只使用重载——这就是它们的用途
-
@pm100 我不建议有人为所有整数和 2 个浮点类型编写所有重载。这是很多不必要的代码重复
-
经验(和时间压力)教会我选择一种类型并坚持下去。当然,如果您是图书馆作家,情况可能会有所不同。
-
使用 SFINAE。一个使用
std::is_intergal和!is_floating_point,另一个使用反向