【发布时间】:2021-11-03 13:11:10
【问题描述】:
考虑以下模板
template <typename T, int v> void func(const T&x);
我想将它专门用于某个课程A。这是我的尝试(参考this):
template <int v> void func<A, v>(const A&x);
但是,这是非法的。我的问题是为什么这是非法的(它违反了哪条规则),如果这违反语法,我们是否有其他方法可以将其专门用于 A?
【问题讨论】:
-
你可以做
template <int v> void func(const A&x); -
@appleapple 但这不是在创建另一个模板吗?
-
有什么区别?你能展示一下你想如何使用它吗?
-
您不能部分专门化函数。参见templates:“部分特化只允许用于类模板[和变量模板(C++14 起)]。”
-
BTW 更好地反转模板参数顺序,因为
T是可推断的:template <int v, typename T> void func(const T&x);允许调用,例如func<42>(my_obj);