你知道如何解决或解决这个问题吗?
#include <boost/variant.hpp>
class b_fwd;
typedef boost::variant<boost::recursive_wrapper<b_fwd> > a;
class c_fwd;
typedef boost::variant<boost::recursive_wrapper<c_fwd> > b;
struct b_fwd : b {
// inherit constructors
template <typename... Ts> b_fwd(Ts... o) : b(o...) {}
};
typedef boost::variant<double, char *> c;
struct c_fwd : c {
// inherit constructors
template <typename... Ts> c_fwd(Ts... o) : c(o...) {}
};
void f(const b &b_node)
{
a a_node(b_node);
}
int main()
{
}
答案 0 :(得分:3)
我对GuyGreer的评论做出了预感。
如果问题是由变体可分配/可转换为变体引起的,那么我们可以通过使用第三个孤立的变体来消除歧义:
a a_node(boost::variant<b>(b_node));
瞧,顺势疗法似乎有效:)
我不知道这个&#34;是否有效&#34; OP期望的意义上,因为,坦率地说,OP的代码对我来说是一个谜。
#include <boost/variant.hpp>
class b_fwd;
typedef boost::variant<boost::recursive_wrapper<b_fwd> > a;
class c_fwd;
typedef boost::variant<boost::recursive_wrapper<c_fwd> > b;
struct b_fwd : b {
using b::b;
};
typedef boost::variant<double, char *> c;
struct c_fwd : c {
using c::c;
};
void f(const b &b_node)
{
a a_node(boost::variant<b>(b_node));
}
int main()
{
}