C++模板部分特化错误

5 c++ templates g++ partial-specialization template-specialization

以下代码给出了一个编译错误: class Q64 is not a valid type for a template constant parameter

template<int GRIDD, class T>
INLINE T grid_residue(T amount) {
  T rem = amount%(GRIDD);
  if (rem > GRIDD/2) rem -= GRIDD;
  return rem;
}


template<int GRIDD, Q64>
INLINE Q64 grid_residue(Q64 amount) {
  return Q64(grid_residue<GRIDD, int64_t>(to_int(amount)));
}
Run Code Online (Sandbox Code Playgroud)

怎么了?我正在努力专攻grid_residueQ64.

更新:

改变了语法.现在得到错误error: function template partial specialization 'grid_residue<GRIDD, Q64>' is not allowed

template<int GRIDD>
INLINE Q64 grid_residue(Q64 amount) {
    return Q64(grid_residue<GRIDD, int>(to_int(amount)));
}
Run Code Online (Sandbox Code Playgroud)

谢谢

ltj*_*jax 9

功能不能部分专业化!使用函数重载:template <int GRIDD> inline Q64 grid_residue(Q64 amount)或将函数包装在一个类型中(可以部分专门化).