1 개 인수를 복용 함수가 아닙니다 :술어 펑, 그건 내가 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);
지금까지 내가 아는 한, 내가 whic의, 템플릿 기반 펑터가
h ThisType 유형으로 인스턴스를 생성 중입니다.이 유형은 unary_function 인수를 기대하는 함수에 전달하고 ThisType의 인스턴스로 호출합니다.
하지만 컴파일러는 "용어가 하나의 인수를 취하는 함수로 평가되지 않습니다."라는 불평을합니다.
무엇이 누락 되었습니까?
매우 명확합니다. 여기에서 템플릿 화 DoStuff의 문제는 그것이 ThisType에 이미 한정되어 있기 때문에, predicate은 항상 pred (ThisType)이 될 것입니다. –
@PhilH : 그건 중요하지 않아야합니다. 원하는 경우'std :: function'을 매개 변수 유형으로 사용할 수 있지만 최적화를 방해하고 형식 지움으로 인해 느린 코드가 생성된다는 것을 제안하지는 않습니다. 다른 손 서식 코드는 더 빨리 코드를 생성합니다. –
Nawaz
이것이 C++의 pre-0x (그러나 tr1과 함께) 버전이기 때문에 다시 생각해야 할 것입니다. –