template<typename T>
T add(T a, T b){
static_assert(std::is_integral<T>::value
|| std::is_floating_point<T>::value
, "Not a numeric value");
return a + b;
}
还有其他/更好的方法来对模板施加约束吗?
static_assert
如果有人尝试使用不合适的类型调用模板,则使用的方法将给您指定的编译器错误。
enable_if
是替代方法,但会产生未定义模板的错误。这可能会使认为它已定义的用户感到困惑,并且必须查看更多细节。
假设你想要
如果使用了错误的类型,则编译将失败(除非用户为自己的类型编写了专门化说明)
给出的错误将是有意义的。
您上面概述的内容static_assert
似乎是实现此目标的一种好方法。
当然,您给了我们一个非常简单的模板,我相信您可能会考虑使用一个更复杂的模板。
本文收集自互联网,转载请注明来源。
如有侵权,请联系 [email protected] 删除。
我来说两句