gpt4 book ai didi

c++ - 如何确定一个参数是否是一个纯函数指针?

转载 作者:行者123 更新时间:2023-11-30 00:37:13 27 4
gpt4 key购买 nike

我想写一个名为is_pure_func_ptr的trait-checker,它可以判断类型是否是一个纯函数指针,如下:

#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
}

我的问题是:如何实现?

最佳答案

正如 Joachim Pileborg 所述,std::is_function会做的工作。如果这不是你的选择,但你确实有 C++11 支持(意味着你只想知道如何自己实现它或者你的标准库还不存在),你可以这样做:

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 限定指针的函数时,您可能需要额外的工作

关于c++ - 如何确定一个参数是否是一个纯函数指针?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/13788788/

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