gpt4 book ai didi

C++ SFINAE 和 !std::is_member_function_pointer::value 的有效性

转载 作者:行者123 更新时间:2023-11-28 04:59:33 25 4
gpt4 key购买 nike

我正在尝试使用 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 规则会说“T 没有名为 nonexistent_member 的成员函数,因此甚至不必考虑将模板视为一场比赛。”

当成员函数确实存在时,is_member_function_pointer 的计算结果为 true,使 enable_if 为 false 并从考虑中移除模板。

我说的对吗?此类型表达式在定义上是否不正确,其中在计算时只会计算为 false。

最佳答案

如果 T::nonexistent_member 是一个成员函数,当然,enable_if 将在之后立即分流。

但是,它也可以是数据成员,或者静态成员函数,或者静态数据成员。在这些情况下,&T::nonexistent_member 是有效的但不是成员函数指针,因此 enable_if 通过。

关于C++ SFINAE 和 !std::is_member_function_pointer::value 的有效性,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/46426250/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com