gpt4 book ai didi

c++ - 泛型 std::function 上的包装类

转载 作者:行者123 更新时间:2023-11-30 02:43:06 25 4
gpt4 key购买 nike

我正在尝试编写一个包装类 foo,它以 std::function 作为参数并公开一个方法来调用该 std::function 。我尝试了以下但没有成功

template<class R, class ...Args>
class foo
{
public:
foo(std::function<R(Args...)> f)
:_f(f)
{
}

R invoke(Args... args)
{
return _f(args...);
}

private:
std::function<R(Args...)> _f;
};

int main()
{
foo<void()> f([&](){ std::cout << "hi\n"; });
f.invoke();
}

这不会编译并给出以下错误

error C2091: function returns function

我怎样才能让它工作?

最佳答案

改变这个:

foo<void()> f([&](){ std::cout << "hi\n"; });

对此

foo<void> f([&](){ std::cout << "hi\n"; });

Demo

或者你可以用函数类型参数化 foo,就像 std::function 那样:

 template<class T>
class foo;

template<class R, class ...Args>
class foo<R(Args...)> {...};

foo<void()> f([&](){ std::cout << "hi\n"; });

Demo

关于c++ - 泛型 std::function 上的包装类,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/26498364/

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