gpt4 book ai didi

c++ - 以泛型函数为参数的泛型函数

转载 作者:行者123 更新时间:2023-11-30 01:57:32 49 4
gpt4 key购买 nike

我找不到一种很好的方法来定义将通用函数作为参数的通用高阶函数。例如,尝试使用最简单的此类功能之一:

template<typename F, typename A>
auto apply(F f, const A& a) -> decltype(f(a)){return f(a);}

当然,当与非模板函数一起使用时,它会按预期工作。但是如果我有,例如<​​/p>

template<typename A>
A id(const A& a){return a;}

然后

int a = 10;
int b = apply(id, a);

将不起作用,因为 id需要一个模板参数。我可以写 id<int>使其工作,但这种做法有违目的(如我所见,这意味着如果我想编写“过滤器”,我必须为每个通用谓词函数编写一个单独的定义)。使用 std::function或函数指针没有帮助。另外,我尝试制作 apply 的“模板模板”版本,但是当我尝试使用它时遇到各种编译器错误:

template<template<typename> class F, typename A>
auto apply2(F<A> f, const A& a)-> decltype(f(a)){return f(a);}

我想到的最好的是:

struct Id{
template<typename A>
static A func(const A& a){return a;}
};

template<typename F, typename A>
auto apply(A a)-> decltype(F::func(a)){return F::func(a);}

有点难看,但现在至少我可以实际通过函数进行参数化了。

那么,有没有更好的方法来做以泛型函数为参数的泛型函数?

最佳答案

这个“仿函数”适用于您的第一个应用版本。

struct id
{
template<typename A>
A operator ()(const A& a) {return a;}
};

稍后

int b = apply(id(), a); // with extra parenthesis to construct the struct.

关于c++ - 以泛型函数为参数的泛型函数,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/18617950/

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