【发布时间】:2017-03-30 10:36:26
【问题描述】:
重载运算符的标准C++03语法如下:
operator-function-id:
operator operator
operator operator 模板参数列表?>
第一种是我们平时使用的普通运算符重载语法,例如
Myclass operator + (Myclass s) {...}
但是第二种选择是什么意思呢?具体来说,我们在什么情况下使用template-argument-list?在快速浏览了 C++11 之后,我发现第二种形式已从标准中删除。它的初衷是什么?
编辑:在使用 VC++2010 进行测试后,以下是使用上述语法的一种方式,尽管它对我来说没有多大意义:
class K {
public:
int a;
template <int B>
int operator + (int b) {
return a+b+B;
}
};
int _tmain(int argc, _TCHAR* argv[])
{
K k;
k.a=1;
int s;
s=k.operator+<115>(2);
printf("%d\n",s);
return 0;
}
output:118
【问题讨论】:
-
什么是“模板化操作符”?
-
你可以为你的类重载操作符。这些重载可以是模板函数。
-
@StoryTeller 但明确的特化不能在类范围内。
-
@GillBates 总是有专门的免费函数。
-
@StoryTeller 够公平
标签: c++ language-lawyer c++03