c++ - std::function 和 std::variant 相互引用
问题描述
我想创建以下类型
using Function = std::function<Variant(int)>;
using Variant = std::variant<int, bool, Function>;
在 Variant 中,我也需要具有 Function,但 Function 应该返回一个 Variant(按值)。但是我找不到正确的语法。我试图前向声明函数,但我不知道该怎么做。
据我所知,我应该能够写出这样的东西,因为对于函数的返回类型,前向声明通常就足够了。
解决方案
你可以搭架子,当然。你不能让两个标识符都是别名。不能前向声明别名。
像这样的东西:
struct Variant;
using Function = std::function<Variant(int)>;
struct Variant : std::variant<int, bool, Function> {
using variant::variant;
};
应该主要按预期工作。返回类型最初是不完整的(只要没有执行要求它完整的操作,这应该没问题)。然后它通过使用别名来完成Function
。
需要注意的是,Variant
它现在是它自己的独立类型。所以模板参数推导的某些方面可能会有所不同。但我怀疑它可能会兴起并打扰你。
如果需要,您还可以选择转换角色。请注意,标准库可能未指定为从其组件继承的类型可靠地运行。因此,可能需要对基类引用进行一些转换。以最适合您的方式进行布局。
推荐阅读
- .htaccess - 使用 php 或 .htaccess 清理 URL
- c++ - 用子类填充的基类向量不起作用
- excel - Visual Studio 2017 - 多个 Excel 工作表
- laravel - 令牌护照用户
- .net - 将托管 DLL (C#) 与 Office 365 (Excel) 一起使用
- python - 文件选择器打开时没有按钮单击子窗口
- python-3.x - pyspark 计算一行中所有列的平均值
- git - 搞砸了我当地的 git 分支。我如何恢复到干净工作的主分支
- angular - Angular Docker 运行时环境
- php - PHP Regex 在保持大小写的同时替换主题