<type_traits>中有这些:

is_pointer<>
is_function<>
is_member_function_pointer<>

但这不是:
is_function_pointer<>

为什么会这样呢?

最佳答案

[meta.unary.cat]中的特征旨在将每种类型归为一个类别。它是void,整数,指针等吗?在此级别上,指向函数的指针与指向int的指针没有什么不同。请注意,指向成员的指针不是指针。它只是一个英语同音异义词。

打算让每种类型都对[meta.unary.cat]中的一个特征完全返回true。在这种分类中,在is_pointer下,函数指针和标量指针都将返回true。

我将指出,我们没有实现我们的目标。 nullptr_t逃脱了我们的目标。但是我们接近了。 Here是当前type_traits分类的图形表示。

更新:

这是一个正常工作的程序,具有正确的输出:

#include <iostream>
#include <type_traits>

typedef void (*fptr)();
typedef int* intptr;

int main()
{
    std::cout << std::is_function<fptr>::value << '\n';
    std::cout << std::is_pointer<fptr>::value << '\n';
    std::cout << std::is_pointer<intptr>::value << '\n';
}

0
1
1

关于c++ - is_function_pointer <>用于<type_traits>,我们在Stack Overflow上找到一个类似的问题:https://stackoverflow.com/questions/6560590/

10-10 18:28