使用模板与功能的好处以及如何推断模板中的类型

时间:2015-07-19 13:59:34

标签: c++ templates

我已经阅读了很多关于推导变量类型的帖子,两者都使用auto和without。我想我有两个问题。

让我们以一个简单的范围函数为例。我可以把它作为模板并调用它:

template <class T, T min, T max> bool inRange(T value) {
   return min <= value && value <= max;
}

bool bbb = inRange<int, 5, 10>(7);

或者我能做到:

template <class T> bool inRange(T min, T max, T value) {
    return min <= value && value <= max;
}

bool bbb = inRange(5, 10, 7);

问题

  1. 是否存在一种方法(缺少为short,int,long,double等创建多个模板1),可以推导出类型,以便可以使用inRange<min, max>(value)调用模板

  2. inRange<min, max>(value)

  3. inRange(min, max, value)是否有任何优势

1 个答案:

答案 0 :(得分:1)

  1. 目前不在。有人建议将其添加到C ++的未来版本中:http://www.open-std.org/jtc1/sc22/wg21/docs/papers/2015/n4469.html
  2. 第一种方法inRange<T, min, max>(value)相当尴尬,因为我们还没有实施上述提案而且无法写inRange<min, max>(value)。如果在编译时不知道min和max,则无论如何第二种方法inRange(min, max, value)是您唯一的选择。第二类内联函数应该与第一类函数一样高效,因此几乎没有任何优势。