C++ 为什么要显式指定模板参数的类型?

C++ 为什么要显式指定模板参数的类型?,c++,templates,C++,Templates,功能模板具有如下原型: template <int pot> inline int gridMaxSelection(Eigen::Vector3f* grads, bool* map_out, int w, int h, float THFac); 模板 内联int gridMaxSelection(特征::矢量3F*梯度,布尔*映射输出, 整数w、整数h、浮点数THFac); 它的名字是这样的: if (spar

功能模板具有如下原型:

template <int pot>
inline int gridMaxSelection(Eigen::Vector3f* grads, bool* map_out, 
                            int w, int h, float THFac); 
模板
内联int gridMaxSelection(特征::矢量3F*梯度,布尔*映射输出,
整数w、整数h、浮点数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); 
if(sparsityFactor==1)
numGoodPoints=gridMaxSelection(梯度、地图、w、h、THFac);
else if(sparsityFactor==2)
numGoodPoints=gridMaxSelection(梯度、地图、w、h、THFac);
else if(稀疏因子==3)
numGoodPoints=gridMaxSelection(梯度、地图、w、h、THFac);
else if(sparsityFactor==4)
numGoodPoints=gridMaxSelection(梯度、地图、w、h、THFac);

为什么不简单地将
pot
参数设为函数参数呢?有效率方面的问题吗?

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

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

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

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

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

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