C++ 这是部分模板专门化吗?

C++ 这是部分模板专门化吗?,c++,C++,我试图通过一些例子来理解模板元编程中的类型函数。 我创建了一个从类型中删除引用的示例 template <class T> struct remove_reference { using type = T; }; template <class T> struct remove_reference<T&> { using type = T; }; int main(){ typename remove_reference<int&am

我试图通过一些例子来理解模板元编程中的类型函数。 我创建了一个从类型中删除引用的示例

template <class T>
struct remove_reference
{ using type = T; };

template <class T>
struct remove_reference<T&>
{ using type = T; };

int main(){
    typename remove_reference<int&>::type a;
}
我的问题是,这是否是使用部分模板专门化实现的,如果我们称之为其他东西? 我觉得它是局部的,因为我们没有为特定类型定义它,但我也觉得不是因为我们有同样多的模板参数。
命名对于理解类型函数可能并不重要,但如果我解释它,我不想教其他人错误的名称。

是的,这是部分专业化,因为您仅限于与模式t&匹配的内容

您不需要更少的模板参数,甚至可以有更多的模板参数。例如


它确实是.type函数。你是说traits吗?@Jarod42 I虽然类型traits返回了一个值,而类型函数返回了一个类型。这不正确吗?有趣的是,知道更多的论点也是可能的,并且更好地理解什么是和不是部分专业化。
template <typename Callable>
struct function_something { ... }; // Any functor type

template <typename Ret, typename Args...>
struct function_something<Ret(Args...)> { ... }; // Specialises free functions

template <typename Class, typename Ret, typename Args...>
struct function_something<Ret(Class::*)(Args...)> { ... }; // Specialises member functions