【发布时间】:2016-06-17 14:01:25
【问题描述】:
我想要做的基本上是(简化但重现问题):
using my_variant_t = variant<int, function<void (recursive_wrapper<my_variant_t>)>>;
也就是说,可以是 int 的变体,也可以是接受相同类型的变体作为参数的函数。但这当然失败了,因为‘my_variant_t’ was not declared in this scope。好的,接下来我试试make_recursive_variant。
using my_variant_t = make_recursive_variant<int, function<void (recursive_variant_)>>::type;
这编译。到目前为止,一切都很好。但是当我尝试使用它时......
my_variant_t x = [](my_variant_t p) {};
然后它失败了...大量编译器输出...但我认为Failed to specialize function template 是重要的一点。
通过反复试验,我发现如果我像这样编写 lambda,我可以编译它:
my_variant_t x = [](recursive_variant_ p) {};
但这不是我所期望的。根据文档,我希望能够引用结果变体类型my_variant_t。更糟糕的是,当我尝试调用这个 lambda 时......
x(42);
然后它以no match for call 失败。
我假设我遗漏了某些东西或以某种方式滥用了变体。有人可以帮我解决这个问题吗?
【问题讨论】: