find_if, count_if와 같은 stl 알고리즘을위한 술어를 설계해야합니다.stl 알고리즘을위한 C++ "스마트"술어
namespace lib
{
struct Finder
{
Finder(const std::string& name):
name_(name)
{
}
template< typename TElement >
bool operator(const TElement& element)
{
return element.isPresent(name_);
}
/* template< typename TElement >
bool operator(const TElement& element)
{
const Data& data = element.getData();
return data.isPresent(name_);
}*/
};
}
하지만 TElement의 일부 특정 메서드가 있는지에 따라 다른 연산자()가 있어야합니다. 마치 "getData"가있는 것처럼 데이터를 확인하고 싶지 않은 경우 다른 작업을 수행합니다.
나는 SFINAE를 알고 있습니다. 그러나 나는 프로젝트에 boost ::가 없다. 그래서 "has_method"템플릿을 쉽게 구현하거나 다른 디자인 솔루션을 알고 있습니다.
이 형식을 "getData"메서드가있는 특정 클래스에 대해 알지 못하는 프로젝트 라이브러리 중 하나에 넣으 려하므로 특정 형식을 지정하고 단순히 오버로드 할 수 없습니다.
클래스 특성이있는 솔루션은 네임 스페이스가없는 한 좋습니다. "lib"네임 스페이스의 Predicate Finder와 "getData"가있는 클래스는 "program"네임 스페이스에 있습니다.
감사합니다.
동작을 변경하는 방법을 보여주기 위해 예제 사용을 추가 할 수 있습니까? – dirkgently