我已经从boost :: variant迁移到std :: variant,并遇到了障碍 .
我在boost 'type()'中使用了一个很好的函数,可以让你获得当前持有的typeid . 见https://www.boost.org/doc/libs/1_48_0/doc/html/boost/variant.html#id1752388-bb
如何用std :: variant实现这一目标?
我在'type_index'上有一个无序的映射键,它包含一些值'std :: function' . 我的变体,取决于类型,将决定我从 Map 中抓取什么功能来进行一些操作 . (我的代码太大了,无法发布) .
除了为特定的std :: variant编写特定访问者之外的任何实现想法?也许在std :: variant上使用'index()'函数,然后索引到变体的类型列表?有点像这样:How to get N-th type from a tuple?
2 回答
另外
这可以让您询问其他非活动的索引 .
问题是当前选择的类型仅在运行时已知,而"obtaining"类型必须在编译时完成 . 这正是我们有访客的原因 - 隐藏
variant
实施背后不可避免的if
语句链 .最好是从这样的访问者内部执行 Map 调度,而不是重新发明该实现 .
如果做不到这一点,你将不得不编写自己的
if
语句链,产生类似于访问者使用的代码,但可能更慢,更难维护!确实,你不能通过阅读
index()
来实现这样的事情,然后让变量给你等效的typeid
,就像你使用Boost实现一样 . 但是我有意思,因为(正如我上面所建议的)任何使用它的代码都是不明智的 . 当然,如果你真的想,你可以写一个访客来制作这样的typeid
!但是,当你可以首先将逻辑放入访问者时,你仍然必须编写条件逻辑来处理这个值 .