在boost :: variant中的类Holden的复制构造函数中的问题

问题描述 投票:0回答:1

我已经尝试使用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技术修复此代码?

c++ boost boost-variant
1个回答
0
投票

您不是复制构造:这就像说:

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

看到它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);
}
© www.soinside.com 2019 - 2024. All rights reserved.