【发布时间】:2019-11-28 21:03:51
【问题描述】:
我正在尝试创建一个std::vector,它可以使用std::variant 保存不同签名的std::function 对象。
为什么下面的代码不能编译:
#include <functional>
#include <variant>
#include <vector>
int main()
{
std::vector<std::variant<
std::function< int (const std::vector<float>&, int) >,
std::function< float (const std::vector<float>&, int) >
>> func_vector;
func_vector.emplace_back( [] (const std::vector<float>& ret, int index) { return ret.size(); });
return 0;
}
问题发生在emplace_back() 期间。编译它会给出一长串错误,列出的第一个是:
error: no matching function for call to ‘std::variant<std::function<int(const std::vector<float, std::allocator<float> >&, int)>, std::function<float(const std::vector<float, std::allocator<float> >&, int)> >::variant(main()::<lambda(const std::vector<float>&, int)>)’
{ ::new((void *)__p) _Up(std::forward<_Args>(__args)...); }
^~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
它说它找不到匹配的函数,但究竟是什么调用?
我试图放置的 lambda 具有我在变体中指定的类型之一的签名,所以一切都应该没问题,不是吗?
【问题讨论】: