unary_functionを継承するファンクタークラスがあります。
template<class T>
class Matcher : public std::unary_function<T, bool>
{
private:
int m_match;
public:
Matcher(int valToMatch) : m_match(valToMatch) { };
bool operator() (T toTest)
{
return T.prop == m_match;
}
}
次のいずれかを使用している関数:
void DoStuff(std::unary_function<ThisType, bool> & pred,
vector<ThisType> & stuffToTest)
{
for(vector<ThisType>::iterator it = stuffToTest.begin();
it != stuffToTest.end(); ++it)
{
if(pred(*it)) // <<< Compiler complains here
{
// do stuff
}
}
}
元の呼び出し関数:
Matcher myMatcher<ThisType>(n);
// have vector<ThisType> myStuff
DoStuff(myMatcher, myStuff);
私の知る限り、テンプレート化されたファンクターがあり、ThisTypeタイプを使用してインスタンスを作成しています。これを、unary_function引数を期待して関数に渡し、ThisTypeのインスタンスを使用して呼び出します。
しかし、コンパイラは「termは1つの引数を取る関数に評価されない」と文句を言います。
私は何が欠けていますか?