我有一個遞歸可變參數模板的方法是從非遞歸可變參數模板方法調用(可能不相關,但我會提到它,以防萬一):可變參數模板和sizeof ...()混淆
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* >(..);
它給了我下面的錯誤:
error: no matching function for call to 'Sy_project::checkPredicate(Sy_simObject* const&)'
我取消明確說明錯誤告訴我UnaryPredicates
是空的,並且只有T
沒有超載,並且確實如果我把它編譯好。但我不知道它如何能夠在sizeof...(UnaryPredicates)
檢查有條件嗎?當然,如果沒有更多,它會被評估爲假,遞歸會結束?
我可以通過添加重載來修復它,我真的很想理解它爲什麼現在不起作用。
[靜態如果我有一個錘子](http://ecn.channel9.msdn.com/events/GoingNative12/GN12StaticIfIHadAHammer.pdf)...! – mavam 2012-08-03 19:14:26