gpt4 book ai didi

C++ 模板函数无匹配调用

转载 作者:行者123 更新时间:2023-11-30 04:15:51 25 4
gpt4 key购买 nike

我试图在 STL 容器(例如 vectorlist)上提供通用映射函数。这是我的实现:

#include <functional>
#include <algorithm>


template<class A, class B, template <class> class F>
F<B> fmap(F<A> &functor, std::function<B(A)> &f)
{
F<B> newFunctor;

return std::transform(begin(functor)
, end(functor)
, begin(newFunctor)
, f);
}

但是当我尝试用代码调用它时:

vector<int> v;

for(int i = 0; i < 5; i++) {
v.push_back(i);
}

vector<int> w = fmap(v, [](int i) { return i + 1; });

我得到一个没有匹配的函数调用错误。

我怎样才能让它工作?

最佳答案

代码中有几处错误。正如已经指出的,第一件事是 std::vector 模板采用 2 个模板参数,即存储类型和分配器。尽管第二个默认为具有存储类型的 std::allocator 的实例化,但它仍然是模板的参数。

您将遇到的第二个问题是,尽管您可以从 lambda 创建 std::function,但 lambda 表达式不是 std::function,因此编译器将无法匹配第二个参数。

关于C++ 模板函数无匹配调用,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/18112181/

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