std::is_function
专门用于具有类似于以下签名的类型:
int(int) &
看这里:std::is_function http://en.cppreference.com/w/cpp/types/is_function
但这既不是指向成员方法的指针,其签名可以是:
int(T::*)(int) &
它也不能是对函数的引用:
int (&)(int)
那么这个奇怪的签名是什么呢?
它是一种仅存在于类型系统中的函数类型。它永远无法被创建。
但这既不是指向成员方法的指针,其签名可以是:
int(T::*)(int) &
就是这个,没有指针。类型系统允许您将其描述为类型。
#include <type_traits>
struct T { };
using A = int(int) &;
using B = A T::*;
using C = int(T::*)(int) &;
static_assert(std::is_same_v<B, C>);
@T.C.提及PR0172R0 http://www.open-std.org/jtc1/sc22/wg21/docs/papers/2015/p0172r0.html,其中讨论了这些类型的存在如何给库编写者带来问题,并提出了一些可能减少这些问题的选项。其中一种选择是完全消除它们,其他选择则减少它们的影响。根据进展情况,这个答案对于 C++ 的未来版本可能正确,也可能不正确。
本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)