boost::variant 获取最后访问的类型

发布于 2024-11-29 03:49:27 字数 241 浏览 1 评论 0原文

这就是我想要做的:

boost::variant a<int, string>;
int b;
a=4;
b=a; //doesn't work. What is the easiest way to make b=4?

我知道我可以使用 get,但我希望能够在不指定类型的情况下执行此操作。我可以使用 apply_visitor 和访问者对象来完成此操作,但我想知道是否有更简单的方法。

This is what I want to do:

boost::variant a<int, string>;
int b;
a=4;
b=a; //doesn't work. What is the easiest way to make b=4?

I know I can use get, but I want to be able to do this without specifying the type. I can do it with apply_visitor and a visitor object, but I was wondering if there is a simpler way.

如果你对这篇内容有疑问,欢迎到本站社区发帖提问 参与讨论,获取更多帮助,或者扫码二维码加入 Web 技术交流群。

扫码二维码加入Web技术交流群

发布评论

需要 登录 才能够评论, 你可以免费 注册 一个本站的账号。

评论(3

公布 2024-12-06 03:49:27

如果您有支持 C++0x 的编译器,则可以使用令人惊叹的 decltype

boost::variant a<int, string>;
int b;
a = 4;
b = boost::get<decltype(b)>(a);

我不知道您为什么要这样做,因为您已经知道类型。

If you have a compiler that supports C++0x, you can use the amazing decltype:

boost::variant a<int, string>;
int b;
a = 4;
b = boost::get<decltype(b)>(a);

I don't know why you'd want to do this though since you already know the type.

我一向站在原地 2024-12-06 03:49:27

您可以编写一个辅助函数:

template <class V, typename T>
copy_variant(const V& v, T& t) { t = get<T>(v); }

// ...

copy_variant(a, b);

但说真的,我认为这比它给您带来的代价更多。

You could write a helper function:

template <class V, typename T>
copy_variant(const V& v, T& t) { t = get<T>(v); }

// ...

copy_variant(a, b);

But seriously, I think this costs you more than it buys you.

摇划花蜜的午后 2024-12-06 03:49:27

没有。

您可以调用 variant<>::which() 来获取 variant<> 当前初始化类型或 variant<> 的索引: :type() 获取当前初始化类型的 std::type_info,但除此之外无法提取当前初始化类型的 get<>apply_visitor

Nope.

You can call variant<>::which() to get the index of the variant<>'s currently initialized type or variant<>::type() to get the std::type_info for the currently initialized type, but there's no way to extract the value of the currently initialized type other than get<> and apply_visitor.

~没有更多了~
我们使用 Cookies 和其他技术来定制您的体验包括您的登录状态等。通过阅读我们的 隐私政策 了解更多相关信息。 单击 接受 或继续使用网站,即表示您同意使用 Cookies 和您的相关数据。
原文