为什么要明确指定模板参数的类型?

时间:2020-12-19 06:44:33

标签: c++ templates

函数模板具有如下原型:

template <int pot>
inline int gridMaxSelection(Eigen::Vector3f* grads, bool* map_out, 
                            int w, int h, float THFac); 

它的名字是这样的:

  if (sparsityFactor == 1)
    numGoodPoints = gridMaxSelection<1>(grads, map, w, h, THFac);
  else if (sparsityFactor == 2)
    numGoodPoints = gridMaxSelection<2>(grads, map, w, h, THFac);
  else if (sparsityFactor == 3)
    numGoodPoints = gridMaxSelection<3>(grads, map, w, h, THFac);
  else if (sparsityFactor == 4)
    numGoodPoints = gridMaxSelection<4>(grads, map, w, h, THFac); 

为什么不简单地将 pot 参数设为函数参数?任何效率问题?

1 个答案:

答案 0 :(得分:2)

不,可能不会有任何效率问题。通常没有。

模板非类型参数和函数参数之间存在区别,就您可以用它们做什么而言。例如如果您的函数定义需要在整型常量表达式中使用该参数,则必须将其设为模板参数:

template<int n> 
void f() 
{
  static_assert(n == 42);  // ok
}

因为函数参数不能用在需要是整型常量表达式的表达式中:

void f(int const n) 
{
  static_assert(n == 42);  // error
}
相关问题