C ++ 11中的模板约束

迈克·克莱因(Maik Klein)
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是替代方法,但会产生未定义模板的错误。这可能会使认为它已定义的用户感到困惑,并且必须查看更多细节。

假设你想要

  1. 如果使用了错误的类型,则编译将失败(除非用户为自己的类型编写了专门化说明)

  2. 给出的错误将是有意义的。

您上面概述的内容static_assert似乎是实现此目标的一种好方法。

当然,您给了我们一个非常简单的模板,我相信您可能会考虑使用一个更复杂的模板。

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

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

编辑于
0

我来说两句

0 条评论
登录 后参与评论

相关文章