boost::variant 中的 class holden 的复制构造函数问题
Problem with the copy constructor of an class holden in boost::variant
我曾尝试使用 boost::variant 构建树结构,但现在我遇到了一些问题。
我在 class holden in boost::variant 中实现了一个复制构造函数并调用了复制构造函数
就像这个代码:
#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 吗?
或者我可以使用出色的提升技术修复此代码吗?
你不是在复制构造:这就像在说:
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,然后你 convert-construct 到变体类型。
#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);
}
我曾尝试使用 boost::variant 构建树结构,但现在我遇到了一些问题。 我在 class holden in boost::variant 中实现了一个复制构造函数并调用了复制构造函数 就像这个代码:
#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 吗? 或者我可以使用出色的提升技术修复此代码吗?
你不是在复制构造:这就像在说:
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,然后你 convert-construct 到变体类型。
#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);
}