所以我有这门课
template<typename T, std::size_t Columns, std::size_t Rows>
class mat_base;
我有这个专业
template<typename T, std::size_t ColumnsRows>
class mat_base<T, ColumnsRows, ColumnsRows>;
每当我尝试将此部分特化用于返回类型或变量时,我都会收到一个错误,提示我没有提供足够的模板参数:(
这是我的用法示例,它没有说出足够的参数:
template<typename T, std::size_t ColumnsRows>
mat_base<T, ColumnsRows> transpose(const mat_base<T, ColumnsRows> &lhs, const mat_base<T, ColumnsRows> &rhs);
好像我替换了 mat_base<T, ColumnsRows>
的每个实例与 mat_base<T, ColumnsRows, ColumnsRows>
它工作正常。
我的问题到底是什么?我在这里没有正确理解什么?
最佳答案
您永远不能引用模板部分特化。你必须引用模板,如果它匹配偏特化,将使用偏特化。
之后
template <typename T>
struct S;
template<>
struct S<int> { };
您不会期望能够引用 S<>
(没有指定 int
),你愿意吗?
之后
template <typename T>
struct S;
template <typename T>
struct S<T *> { };
你会期望 S<int *>
将部分特化与 T = int
匹配, 不适用于 T = int *
,对吧?
这里没有区别。如果模板具有三个参数,则您需要三个参数才能使用该模板。
关于c++ - 部分模板特化没有给出正确的结果,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/23403198/