繁体   English   中英

这是部分模板专业化吗?

[英]Is this partial template specialization?

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

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&匹配的事物。

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

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

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM