不能从lambda构建
Cannot construct from lambda
我遇到了一个汇编问题。我不明白为什么以下代码不编译:
#include <functional>
namespace async {
template<class ...T>
using Callback = std::function<void(const std::string& result, T ...args)>;
template<class Signature>
class Function;
template<class Res, class ...Args>
class Function<Res(Args...)>
{
std::function<void(Args ...args, const Callback<Res>&)> m_function;
public:
Function(std::function<void(Args ...args, const Callback<Res>&)>&& function) : m_function(std::move(function)) {}
Function& operator=(std::function<void(Args ...args, const Callback<Res>&)>&& function) {m_function = std::move(function); return *this;}
void operator()(Args... args, const Callback<Res>& callback) const {m_function(args..., callback);}
};
}
async::Function<int(int)> getF()
{
return [](int i, const async::Callback<int> callback)
{
callback("", i);
};
}
int main(int argc, char** argv)
{
auto f0 = getF();
return 0;
}
GCC说:
在函数" async :: function getf(("中 错误:无法将'getf((:: __ lambda0 {}'从'getf((:: __ lambda0''转换为'async :: function'
ICC说:
错误:没有合适的用户定义的转换来自" lambda [](int,async :: callback( -> void to" async :: function"
现在,如果我替换
return [](int i, const async::Callback<int> callback)
{
callback("", i);
};
return async::Function<int(int)>([](int i, const async::Callback<int> callback)
{
callback("", i);
});
然后起作用。为什么我需要明确施放以及如何避免这种情况?
一个简单的解决方案是将类功能替换为
之类的东西template<class Signature>
using Function = std::nullptr_t;
template<class Res, class ...Args>
using Function<Res(Args...)> = std::function<void(Args ...args, const Callback<Res>&)>;
但是使用<Res(Args...)>
的专业不编译...
没有Function
构造函数接受lambda。有一个接受std::function
,还有一个std::function
构造函数接受lambda,但是C 永远不会为您组合两个隐式用户定义的转换。
定义所需构造函数的最简单方法是
template <class T>
Function (T&& t) : m_function(std::forward<T>(t)) {}
相关文章:
- C++为构建时间获取QDateTime的可靠方法
- 无法在 CLion 中构建 C++ 项目
- lambda参数转换为constexpr技巧,然后获取带链接的数组
- 函数向量_指针有不同的原型,我可以构建一个吗
- 如何使用ndk-build.cmd构建Android.so文件
- 可组合的lambda/std::函数与std::可选
- libssh 的函数在构建 libssh 时无法在 Qt 和 cmake 错误中找到
- C++Boost Asio Pool线程,带有lambda函数和传递引用变量
- 如何建立使用模板函数的lambda函数的尾部返回类型
- 使用cmake从源代码构建MySQL连接器/C++失败(与以前的声明冲突)
- VSCode-有一个红色下划线,但程序构建和运行正确,并且出现配音错误
- 构建可组合有向图(扫描仪生成器的汤普森构造算法)
- 如何将lambda作为模板类的成员函数参数
- C++从其他 constexpr 创建 lambda 不能按顺序执行 Constexpr
- lambda 对象构建成本高吗?
- 我的lambda在复制构建期间没有正确转换捕获的"this"
- 不能从lambda构建
- <string> 在 Lambda 捕获中构建intializer_list
- 当从固定结构体中存储的对象构建函数时,c++ lambda构建静态函数返回意外值
- 线程构建块(TBB)使用lambda为任务排队