我需要为 stl 算法设计谓词,例如 find_if、count_if。
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”实现,要么你知道一些其他的设计解决方案。
我不能指向特定类型并简单地重载,因为我想将此 Predicate 放在项目库之一中,该项目库不知道那些具有“getData”方法的特定类。
只要没有命名空间,具有类特征的解决方案就很好。“lib”命名空间中的谓词查找器和具有“getData”的类位于“program”命名空间中。
谢谢。