lad*_*afa 2 c++ struct overloading
我有一个简单的C++结构如下:
// Functor for peak to decreasing intensity sorting
struct cmp_decr_int2
{
bool operator() (peak2 a, peak2 b)
{
return a.int2 > b.int2;
}
};
Run Code Online (Sandbox Code Playgroud)
这个样本中的操作员是否有过载?
GMa*_*ckG 10
是.operator()被称为"函数调用"操作符,并允许对象可用,就像它是一个函数一样.这样的类称为"仿函数".
一个常见的模式是使函子比较两个事物的相等或关系,用于需要比较谓词的任何事物.(这一个可以在一个可用的std::map,例如它必须象的部件.cmp_decr_int2 compare;然后它可以比较两个东西之间的关系:if (compare(x, y)) /* x is less than y, by some metric */)
这个特定的结构peak2通过比较它们的int2成员来命令两个.它可以更好地写为:
struct cmp_decr_int2
{
// note const! vvvvv
bool operator() (peak2 a, peak2 b) const
{
return a.int2 > b.int2;
}
};
Run Code Online (Sandbox Code Playgroud)
该功能应该是const因为它不需要改变任何成员(没有改变.) - const正确性很重要.*
在许多情况下,这些仿函数用在参数本身所在的上下文中const,因此您应该按照示例中的值或通过常量引用来获取参数.
您应该更喜欢通过const-reference over-value传递类型,除非该类型是基本类型(float,unsigned int,double等)或小于a void*.在大多数情况下,您将通过const-reference传递:
struct cmp_decr_int2
{
// note const&: vvvvv v vvvvv v vvvvv
bool operator() (const peak2 & a, const peak2 & b) const
{
return a.int2 > b.int2;
}
};
Run Code Online (Sandbox Code Playgroud)
*如果这被用作a中的谓词std::map,例如,如果没有const地图,则无法在const函数内比较两个事物.
| 归档时间: |
|
| 查看次数: |
270 次 |
| 最近记录: |