c++ 11中的模板约束
Template constraints in C++11
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
似乎是实现这一目标的好方法。
当然你给了我们一个非常简单的模板,我相信你很可能会考虑一个更复杂的。
你为什么要这样做?你可以用Duck-Typing风格来做:你不检查类型是否合适,如果没有定义operator+
,它就不会编译。
#define RETURNS(WHAT) ->decltype(WHAT) {return WHAT;}
template<typename T>
auto add(T a, T b) RETURNS(a+b)
相关文章:
- 函数作为模板参数,是否对返回类型强制约束
- 约束和显式模板实例化
- IpOpt拒绝解决不受约束的问题
- 使用C++模板时表达约束
- 如何在 SCIP C++ 接口中获取 MILP 约束矩阵中的系数值
- 受约束的成员函数和显式模板实例化
- 具有多种约束(例如重量、体积等)的背包
- Gecode 与 Z3 用于约束随机化
- 如果原型是本地的,则使用流 I/O C++类型约束将失败
- C++打开具有 2 个约束的文件
- 如何拥有受约束的运算符模板?
- 不生成单独约束的变量的 Gurobi 影子价格
- 在 C++20 中对概念约束函数进行排序的规则是什么?
- 如何使用 g2o 优化多约束函数
- 约束类模板函数以接受特定的 POD 类型
- 约束包容是否仅适用于概念?
- 检查特定txt文件中的项目是否符合"名称编号USACO"中的约束
- 对类模板成员的显式专用化的约束
- 如何在没有外部库的情况下使用C++03约束执行基于正则表达式的字符串操作
- TS 概念类型名约束