如果Template arg是函数指针

时间:2016-12-06 14:54:54

标签: c++ templates function-pointers

如果我有模板类

template <class T>
class foo
{  /**/  }

如果T是函数指针,我将如何找到?

std::is_pointerstd::is_function但没有is_function_pointer

1 个答案:

答案 0 :(得分:4)

只需删除指针并检查结果是否为函数。

以下是代码示例:

#include <utility>
#include <iostream>


template<class T> constexpr bool foo() {
    using T2 = std::remove_pointer_t<T>;
    return std::is_function<T2>::value;
}


int main() {
    std::cout << "Is function? " << foo<void (int)>()
              << "; is function pointer? " << foo<int (*)()>() << "\n";

}