C++ 启用模板函数的关键顺序
对于C++ 启用模板函数的关键顺序,c++,c++11,metaprogramming,enable-if,template-function,C++,C++11,Metaprogramming,Enable If,Template Function,对于std::tuple namespace TupleVisit{ //This function SHOULD BE DEFINED SECONDLY; //IN THIS CONFIGURATION COMPILER DOES NOT //SEE THE BELOW RECURSTION TERMINATION ??? template<std::size_t Idx = 0, t
std::tuple
namespace TupleVisit{
//This function SHOULD BE DEFINED SECONDLY;
//IN THIS CONFIGURATION COMPILER DOES NOT
//SEE THE BELOW RECURSTION TERMINATION ???
template<std::size_t Idx = 0,
typename Visitor,
typename... T,
typename std::enable_if< Idx < sizeof...(T) , void *>::type = nullptr
>
static
void visit(Visitor && v, std::tuple<T...> & t){
v( std::get<Idx>(t) );
TupleVisit::visit<Idx+1, Visitor, T... >(std::forward<Visitor>(v),t);
}
template<std::size_t Idx = 0,
typename Visitor,
typename... T,
typename std::enable_if< Idx == sizeof...(T) , void *>::type = nullptr
>
static void
visit(Visitor && v, std::tuple<T...> & t){}
}
namespace-TupleVisit{
//其次要明确这一功能;
//在此配置中,编译器不会
//参见下面的递归终止???
模板::type=nullptr
>
静止的
无效访问(访客和v,标准::元组和t){
v(std::get(t));
TupleVisit::访问(std::转发(v),t);
}
模板::type=nullptr
>
静态空隙
访问(访问者&v,std::tuple&t){}
}
实例:
我认为多个enable_if开关的一般规则应该是对所有函数进行原型化,然后按任意顺序定义它们?这会导致SFINAE始终看到正确的可用功能吗?为什么它会看到下面声明的
访问
template
函数不是宏——函数查找在编写模板时完成,再加上从调用模板的上下文进行ADL查找
由于无法通过ADL找到第二次就诊
,因此在第一次就诊
的呼叫点上看不到该就诊
,为什么它会看到下方声明的就诊
template
函数不是宏——函数查找在编写模板时完成,再加上从调用模板的上下文进行ADL查找
由于第二次就诊
无法通过ADL找到,因此在第一次就诊
的呼叫点处不可见