我有一个递归可变参数模板化方法,它是从非递归可变参数模板化方法调用的(可能不相关,但我会提到它以防万一):
template < class T, class UnaryPredicate, typename... UnaryPredicates >
static bool checkPredicate( const T obj,
const UnaryPredicate& p,
UnaryPredicates... predicates )
{
bool output = p( obj );
if ( output && sizeof...( UnaryPredicates ) ) {
output = checkPredicate( obj, predicates... ); // The problem line.
}
return output;
}
但是,当调用时:
.. = checkPredicate< Sy_simObject*, VisiblePredicate< Sy_simObject* >( .. );
它给了我以下错误:
错误:没有用于调用“Sy_project::checkPredicate(Sy_simObject* const&)”的匹配函数
我知道错误告诉我那UnaryPredicates
是空的,并且 just 没有重载,T
如果我在其中放入一个就可以正常编译。但是我不明白在条件检查中它怎么能走那么远sizeof...( UnaryPredicates )
?当然,如果没有更多,它会被评估为假并且递归会结束吗?
我可以通过添加重载来修复它,我真的很想了解为什么它现在不起作用。