我正在使用C ++中的SFINAE
来创建一个通用的容器插入器模板函数,并且认为通过以下构造考虑门控的模板
// replace T::nonexistent_member with whatever member function you want to test
// note the ! negation operator
std::enable_if< ! std::is_member_function_pointer<decltype(&T::nonexistent_member)>::value>
按照定义从不有效。
当成员函数不存在时,SFINAE
规则会说&#34; T没有名为nonexistent_member
的成员函数,所以不要在考虑模板时烦恼作为比赛。&#34;
当成员函数存在时,is_member_function_pointer
计算结果为true,使enable_if
为false并删除模板。
我说错了吗?这种类型表达式在定义上是不正确的,在评估时,它只会计算为false。
答案 0 :(得分:1)
如果T::nonexistent_member
是会员功能,请确保此后enable_if
会分流。
但是,它也可以是数据成员,静态成员函数或静态数据成员。在这些情况下,&T::nonexistent_member
有效,但不是成员函数指针,因此enable_if
通过。