C++ 模板类外部长定义的替代方法
假设我有一个模板类,我想在类之外定义C++ 模板类外部长定义的替代方法,c++,templates,C++,Templates,假设我有一个模板类,我想在类之外定义operator=: template<uint32_t total_count, uint32_t init_count, uint32_t node_count> class cls { ... cls & operator= (cls && c); ... }; template<uint32_t total_count, uint32_t init_count, uint32_t no
operator=
:
template<uint32_t total_count, uint32_t init_count, uint32_t node_count>
class cls
{
...
cls & operator= (cls && c);
...
};
template<uint32_t total_count, uint32_t init_count, uint32_t node_count>
cls<total_count, init_count, node_count> &
cls<total_count, init_count, node_count>::operator=
(cls<total_count, init_count, node_count> && c)
{
...
}
模板
cls类
{
...
cls&operator=(cls&c);
...
};
模板
cls&
cls::运算符=
(cls&c)
{
...
}
除了缩短模板参数名称外,上述定义还有其他替代方法吗?您的定义版本会重复模板参数的次数超过必要的次数。函数的限定名告诉编译器上下文是具有指定模板参数的
cls
类模板。在这一点之后,任何出现的cls
(不带参数)都可以被假定为表示此上下文,类似于您在模板定义中所做的操作。因此,不需要参数列表中的显式模板参数;一个简单的cls
将被假定为意味着cls
语法技巧同样可以简化返回类型。在C++11中引入的,允许在函数名引入上下文后声明返回类型。与参数列表一样,一旦处于正确的上下文中,就可以忽略模板参数
template<uint32_t total_count, uint32_t init_count, uint32_t node_count>
auto cls<total_count, init_count, node_count>::operator= (cls && c) -> cls &
{
...
}
模板
自动cls::运算符=(cls&c)->cls&
{
...
}
社区wiki,因为这些简化是由POW和parktomatomi在评论中给出的。
cls&&c
也可以是cls&&c
,使用尾部返回类型:auto…->cls&
(此处的“…”不是实际语法)