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现在是它自己的独立类型。所以模板参数推导的某些方面可能会有所不同。但我怀疑它可能会上升并打扰你。
如果需要,您还可以选择翻转角色。请注意,标准库可能未指定为从其组件继承的类型可靠地运行。所以对基类引用的一些转换可能是有序的。以最适合您的方式布置它。