C sfinae和!std :: is_member_function_pointer :: value的有效性
C++ SFINAE and the validity of !std::is_member_function_pointer::value
我正在使用C 中的SFINAE
进行一些播放,以创建一个通用容器插入器模板函数,而i think the the Mepplate the Inspection the Inspection的模板以下构造
// 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
规则会说" T没有名为nonexistent_member
的成员函数,因此甚至不要考虑将模板作为匹配。"
当成员函数确实存在时, is_member_function_pointer
会评估为true,使 enable_if
false并从考虑中删除模板。
我正确吗?这种类型的表达在定义上是不正确的吗,当评估时,它只会评估为false。
如果 T::nonexistent_member
是成员函数,则当然,enable_if
此后会分流。
但是,它也可以是数据成员,静态成员函数或静态数据成员。在这种情况下,&T::nonexistent_member
是有效的,但不是成员函数指针,因此enable_if
通过。
相关文章:
- "error: no matching function for call to"构造函数错误
- 调用专用模板时出错"no matching function for call to [...]"
- C++ - "!pointer"和"pointer == nullptr"的区别?
- 库函数需要一个 std::function<void(void)>,如何传入类函数?
- Confusion: decltype vs std::function
- 为什么 std::function 可以作为 std::not2 的参数?
- 'max'匹配'std::function<const int &(const int &, const int &)>'无过载
- 传递给std::function template的template参数究竟代表什么
- "Called Object Type is Not a Function or Pointer" 与 typedef 和类
- 是否可以定义"template function pointer"的类型?
- 在 2D 阵列分配期间对 calloc 进行"expression must have (pointer-to) function type"
- "Called object 'int' is not a function or a function pointer"错误
- 为什么隐式"lambda to function pointer conversion"禁止"by reference"捕获静态成员?
- 'variable' 不是类型 'pointer to member function' 的有效模板参数
- C++ 中的"function Pointer"与 C# 中的"delegate"行为相似吗?
- 何时使用"pointer to function"和"function pointer"?
- pre-typedef'ing a variadic-function-pointer 参数
- 在 Python 中传递"pointer to a virtual function"作为参数
- typedef & function pointer
- Pointer-to-member-function error