[英]Operator overloading in template in C++
我从某处阅读以下代码:
template<class T> class A {
T a;
public:
A(T x):a(x) {}
operator T() const {return a;} // what is point here?
};
int _tmain(int argc, _TCHAR* argv[])
{
A<int> a = A<int>(5);
int n = a;
cout << n;
return 0;
}
下面的线是什么意思?
运算符T()const {返回a;}
这意味着如果要将实例转换为T
,则可以使用此运算符,该运算符将返回private成员的副本。
在示例代码中,可以直接将类型为A<int>
a
分配给int
。 尝试删除operator T()
,看看它如何编译失败,并出现关于将A<T>
辅助到int
的错误。
使用非explicit
构造器(将构造器标记为explicit
的相反),在许多情况下,它也使此类型的行为与模板类型本身非常相似。 实际上,您已将T
包裹在另一个类中,该类在需要时的行为类似于T
您可以将其扩展为做其他更有用的事情,例如通过将真实实例隐藏在控制它们的东西后面来监视/记录/限制实际实例的使用。
还要注意如何更改A<int> a = A<int>(5);
简单地说A<int> a = 5;
由于隐式构造函数。
它基本上是在制造函子-这是具有函数语义的对象。 这意味着您可以像调用函数一样在代替函数的地方调用对象-它是通用的编程概念。
这是有益的,因为您可以具有该功能对象(functor)的多个实例,并且每个实例都可以维护自己的状态,就好像您拥有一个简单函数一样,它只能通过静态变量维护状态,因此不会重入(只能获得一个静态变量的实例)。
在STL算法中,函子作为额外的可选参数被大量使用。
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.