提升递归变体
Boost recursive variant
本文关键字:递归 更新时间:2023-10-16
我想做的本质上是(简化但重现问题):
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
.
假设我错过了一些东西或以某种方式滥用变体。有人可以帮我解决这个问题吗?
你只是对递归变体占位符系统的期望过高。
对于库来说,在模板参数列表中发现和替换类型是一回事(如 std::vector<_>
,其中_
例如占位符recursive_variant_
)。
期望在模板参数列表内的函数签名中检测(和替换)占位符完全是另一回事。
我不确定是否可以完成,但这将是非常困难的(在编译过程中正确和努力地使用编译器)
相关文章:
- 通过递归进行因子分解
- 递归函数计算序列中的平方和(并输出过程)
- 使用递归的数组的最小值.这是怎么回事
- 递归列出所有目录中的C++与Python与Ruby的性能
- 递归计数给定目录的文件和所有目录
- 如何在BST的这个简单递归实现中消除警告
- C++:正在检查LinkedList中的回文-递归方法-错误
- 递归模板化函数不能分配给具有常量限定类型"const tt &"的变量"state"
- 递归无序映射
- TSP递归解的迭代形式
- 如何在Elixir中调用递归函数并行
- 返回递归调用和仅递归调用的区别
- 数组元素打印的递归方法
- 使用递归时获取变量的奇怪值
- 如何在C++中递归地按相反顺序打印集合
- 到连接组件算法的问题(递归)
- 如何使用递归打印修改后的星号三角形图案
- 使用递归模板动态分配的多维数组
- 递归函数有效,但无法记忆
- 包含模板文件的递归会导致编译失败