C++模板部分特化错误

5
以下代码给我编译错误:class Q64不是模板常量参数的有效类型。
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)));
}

有什么问题吗?我正在尝试为Q64类专门化grid_residue

更新:

更改语法。现在出现错误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)));
}

谢谢

3个回答

9

函数不能进行部分特化!要么使用函数重载:template <int GRIDD> inline Q64 grid_residue(Q64 amount),要么将函数包装在一个类型中(该类型可以进行部分特化)。


函数重载...这不是一种特化吗?然而,我仍然在修改后的代码中遇到错误(我会发布它)。 - JP19
在http://bytes.com/topic/c/answers/61482-partial-specialization-function-template上找到了语法。 - JP19

1

你不能部分地专门化函数。


那就是,如果您提供了如何使用两个简单类来实现此操作的示例,那么这将是一个加分项... - Diego Sevilla

0
struct test
{

};

template<int GRIDD, class T>
T grid_residue(T amount) 
{
    std::cout << "template<int GRIDD, class T> T grid_residue(T amount)" << " GRIDD: " << GRIDD << std::endl;
    return T();
}


template<int GRIDD>
test grid_residue(test amount) 
{
    std::cout << "template<int GRIDD> test grid_residue(test amount)" << " GRIDD: " << GRIDD << std::endl;
    int inp = 0;
    grid_residue<GRIDD,int>(inp);
    return test();
}


int 
_tmain(int argc, _TCHAR* argv[])
{
    test amount;
    grid_residue<19>(amount);
    std::string inValue;
    grid_residue<19>(inValue);
}

编译/链接正常(VS2010)。


网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接