我想编写一个名为is_pure_func_ptr的特征检查器,它可以确定该类型是否为纯函数指针,如下所示:
#include <iostream>
using namespace std;
void f1()
{};
int f2(int)
{};
int f3(int, int)
{};
struct Functor
{
void operator ()()
{}
};
int main()
{
cout << is_pure_func_ptr<decltype(f1)>::value << endl; // output true
cout << is_pure_func_ptr<decltype(f2)>::value << endl; // output true
cout << is_pure_func_ptr<decltype(f3)>::value << endl; // output true
cout << is_pure_func_ptr<Functor>::value << endl; // output false
cout << is_pure_func_ptr<char*>::value << endl; // output false
}
我的问题是:如何实施?
答案 0 :(得分:4)
如Joachim Pileborg所述,std::is_function
将完成这项工作。
如果这不适合您,但您确实拥有C ++ 11支持(意味着您只想知道如何自己实现它或者您的标准库还没有),您可以这样做:< / p>
template<typename T>
struct is_pure_func_ptr: public std::false_type {};
template<typename Ret, typename... Args>
struct is_pure_func_ptr<Ret(Args...)>: public std::true_type {};//detecting functions themselves
template<typename Ret, typename... Args>
struct is_pure_func_ptr<Ret(*)(Args...)>: public std::true_type {};//detecting function pointers
This works,但在支持具有不同调用约定和/或cv限定指针的函数时,您可能还需要额外的工作
答案 1 :(得分:3)
如果您有C ++ 11标准库,请尝试std::is_function
。