我尝试使用boost::variant构造树结构,现在遇到了一些问题。
我在boost::variant的类holden中实现了一个复制构造函数,并调用了该复制构造函数
就像这段代码:
#include <iostream>
#include <boost/variant.hpp>
struct Hoge{
int i;
Hoge(int j) : i(j){};
Hoge(Hoge const& hoge) : i(hoge.i) {}
};
using var = boost::variant<int,Hoge>;
int main()
{
var hoge = Hoge(1);
var hogehoge = Hoge(hoge);
}
编译失败,因为没有匹配的函数来调用“Hoge::Hoge(var&)”。
如何修复此代码?复制构造函数是否应该具有参数boost::variant?
还是可以使用出色的Boost技术修复此代码?
最佳答案
您不是复制构造:这就像说:
var hogehoge = var(hoge); // elided assign of copy-ctor
或者确实只是
var hogehoge(hoge);
var hogehoge = hoge;
因此,您需要说的是要复制
Hoge
,var hogehoge = boost::get<Hoge>(hoge); // may throw if `hoge` holds int
因此,您可以复制构造Hoge,然后将其转换为变体类型。
看到它 Live On Coliru
#include <boost/variant.hpp>
#include <iostream>
struct Hoge {
int i;
Hoge(int j) : i(j){};
Hoge(Hoge const& hoge) : i(hoge.i) {}
};
using var = boost::variant<int, Hoge>;
int main() {
var hoge = Hoge(1);
var hogehoge = boost::get<Hoge>(hoge);
}