我想创建一个函数,如:
template < typename Other, typename Func, typename T, typename ...Rest >
void visit( Other &&other, Func &&visitor )
{
// Wrap "visitor" and "other" with "std::forward" calls
visitor( make_object<T>(other) );
visit<Other, Func, Rest...>( other, visitor );
}
问题是“Func”可能不支持列表中的所有类型,然后编译器会在第一个错误的类型处出错。我不想要那个;我希望它执行一些默认操作(就我而言,什么都不做)。
template < typename Other, typename Func, typename T, typename ...Rest >
void visit( Other &&other, Func &&visitor )
{
// Wrap "visitor" and "other" with "std::forward" calls
if ( Func-can-support-T-either-directly-or-by-converting-it )
visitor( make_object<T>(other) );
else
; // might be a throw or a logging instead
visit<Other, Func, Rest...>( other, visitor );
}
我想我可以做 2 个重载的辅助函数,一个std::true_type
基于兼容性测试,另一个std::false_type
. 但是如何创建测试?
(对更好的标题和/或附加标签的建议表示赞赏。)