函数模板具有如下原型:
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
参数设为函数参数?任何效率问题?
答案 0 :(得分:2)
不,可能不会有任何效率问题。通常没有。
模板非类型参数和函数参数之间存在区别,就您可以用它们做什么而言。例如如果您的函数定义需要在整型常量表达式中使用该参数,则必须将其设为模板参数:
template<int n>
void f()
{
static_assert(n == 42); // ok
}
因为函数参数不能用在需要是整型常量表达式的表达式中:
void f(int const n)
{
static_assert(n == 42); // error
}