关于C++函数对象的问题
questions about function object in C++
我对以下代码有疑问。
template <typename T>
struct DisplayElementKeepCount
{
int m_nCount;
DisplayElementKeepCount () { m_nCount = 0; }
void operator () (const T& element){++ m_nCount; cout<<element<<‘ ‘;}
};
调用时写成:
DisplayElementKeepCount <int> mResult;
mResult = for_each ( vecIntegers.begin (), vecIntegers.end (), DisplayElementKeepCount <int> () );
不太明白,因为operator()需要一个参数"element",但是调用的时候没有包含。为什么?
IsMultiple的例子调用的时候其实是给了一个参数。为什么这两个不同??
template <typename numberType>
struct IsMultiple
{
numberType m_Divisor;
IsMultiple (const numberType& divisor)
{
m_Divisor = divisor;
}
// The comparator of type: bool f(x)
bool operator () (const numberType& element) const
{
// Check if the dividend is a multiple of the divisor
return ((element % m_Divisor) == 0);
}
};
...
vector <int>::iterator iElement;
iElement = find_if ( vecIntegers.begin (), vecIntegers.end (),
IsMultiple <int> (4) );
在您的第一个示例中,DisplayElementKeepCount
有一个默认构造函数(采用零参数)并且您正在使用它。
for_each ( vecIntegers.begin (), vecIntegers.end (), DisplayElementKeepCount <int> () );
// Constructor ^^
如果您要调用 operator()
,它会如下所示。
DisplayElementKeepCount<int>()(5)
// Constructor ^^
// ^^^ calling operator() on the unnamed instance
在您的第二个示例中,IsMultiple
有一个采用单个参数的构造函数。
find_if ( vecIntegers.begin (), vecIntegers.end (), IsMultiple <int> (4) );
// Constructor ^^^
同样,如果您正在调用 operator()
,它将如下所示。
IsMultiple<int>(4)(2)
// Constructor ^^^
// ^^^ calling operator() on the unnamed instance
我对以下代码有疑问。
template <typename T>
struct DisplayElementKeepCount
{
int m_nCount;
DisplayElementKeepCount () { m_nCount = 0; }
void operator () (const T& element){++ m_nCount; cout<<element<<‘ ‘;}
};
调用时写成:
DisplayElementKeepCount <int> mResult;
mResult = for_each ( vecIntegers.begin (), vecIntegers.end (), DisplayElementKeepCount <int> () );
不太明白,因为operator()需要一个参数"element",但是调用的时候没有包含。为什么?
IsMultiple的例子调用的时候其实是给了一个参数。为什么这两个不同??
template <typename numberType>
struct IsMultiple
{
numberType m_Divisor;
IsMultiple (const numberType& divisor)
{
m_Divisor = divisor;
}
// The comparator of type: bool f(x)
bool operator () (const numberType& element) const
{
// Check if the dividend is a multiple of the divisor
return ((element % m_Divisor) == 0);
}
};
...
vector <int>::iterator iElement;
iElement = find_if ( vecIntegers.begin (), vecIntegers.end (),
IsMultiple <int> (4) );
在您的第一个示例中,DisplayElementKeepCount
有一个默认构造函数(采用零参数)并且您正在使用它。
for_each ( vecIntegers.begin (), vecIntegers.end (), DisplayElementKeepCount <int> () );
// Constructor ^^
如果您要调用 operator()
,它会如下所示。
DisplayElementKeepCount<int>()(5)
// Constructor ^^
// ^^^ calling operator() on the unnamed instance
在您的第二个示例中,IsMultiple
有一个采用单个参数的构造函数。
find_if ( vecIntegers.begin (), vecIntegers.end (), IsMultiple <int> (4) );
// Constructor ^^^
同样,如果您正在调用 operator()
,它将如下所示。
IsMultiple<int>(4)(2)
// Constructor ^^^
// ^^^ calling operator() on the unnamed instance