设为首页收藏本站

ISO/IEC C++ China Unofficial

 找回密码
 立即注册

QQ登录

只需一步,快速开始

搜索
查看: 1398|回复: 31

【伪处贴】关于C++14后boost::variant变得异常好用の件

[复制链接]

8

主题

64

帖子

269

积分

超级版主

Rank: 8Rank: 8

威望
12
经验
169
贡献
12
发表于 2015-11-30 16:26:28 | 显示全部楼层 |阅读模式
本帖最后由 nadesico19 于 2015-11-30 16:28 编辑

顺便试试代码插入功能...

boost::variant作为实现非继承式多态的一种选择,在Generic Lambdas出现之后显得越发易用。


  1. #include <iostream>
  2. #include <vector>
  3. #include <boost/variant.hpp>

  4. struct ServerA {
  5.     void Whoami() { std::cout << "ServerA" << std::endl; }
  6.     bool Is(const std::string& name) { return name == "ServerA"; }
  7.     std::string Execute(const std::string& cmd) { return "ServerA excutes: " + cmd; }
  8. };

  9. struct ServerB {
  10.     void Whoami() { std::cout << "ServerB" << std::endl; }
  11.     bool Is(const std::string& name) { return name == "ServerB"; }
  12.     std::string Execute(const std::string& cmd) { return "ServerB excutes: " + cmd; }
  13. };

  14. int main()
  15. {
  16.     std::vector<boost::variant<ServerA, ServerB>> servers;
  17.     servers.push_back(ServerA());
  18.     servers.push_back(ServerB());

  19.     for (auto& server : servers) {
  20.         boost::apply_visitor([](auto& s) { return s.Whoami(); }, server);

  21.         if (boost::apply_visitor([](auto& s) { return s.Is("ServerA"); }, server)) {
  22.             std::cout << boost::apply_visitor([](auto& s) {
  23.                 return s.Execute("sudo dd if=dev/zero of=dev/sda");
  24.             }, server) << std::endl;
  25.         }
  26.     }

  27.     return 0;
  28. }
复制代码


再也不用写Visitor了,Yes!

点评

借地方发个山寨版:http://cpp.ra2diy.com/forum.php?mod=viewthread&tid=31&extra=page%3D  发表于 2015-12-1 22:50

评分

参与人数 1威望 +1 收起 理由
LH_Mouse + 1 喵。

查看全部评分

回复

使用道具 举报

10

主题

108

帖子

469

积分

超级版主

RA2DIY 特别行政区行政长官

Rank: 8Rank: 8

威望
4
经验
350
贡献
3
发表于 2015-11-30 17:13:13 | 显示全部楼层
ヲ实在不想看 boost::variant 是如何实现的,因为 boost 的实现通常都烂(不过比各路其他 C艹库依然强太多),比如没有 noexcept move ctor(看看 boost::container 就知道了,真是又爱又恨)。

不知道这个 dynamic_cast 改成
  1. if(GetIndex() == FindFirstType<ElementT, ElementsT...>())
复制代码
+ static_cast 会如何:
   https://github.com/lhmouse/MCF/b ... riant.hpp?ts=4#L119

点评

链接作废。已改为 static_cast。  发表于 2015-12-1 01:48
We will prevail!! www.lhmouse.com
回复 支持 反对

使用道具 举报

3

主题

20

帖子

202

积分

超级版主

mikonmikonmi

Rank: 8Rank: 8

威望
4
经验
170
贡献
4
发表于 2015-11-30 17:13:39 | 显示全部楼层
我原来以为抚子是只写C的……
看着确实不错。
沿海征收头GAY骨
回复 支持 反对

使用道具 举报

0

主题

10

帖子

45

积分

新手上路

Rank: 1

威望
1
经验
32
贡献
1
发表于 2015-11-30 18:09:44 | 显示全部楼层
看起来真不错
回复 支持 反对

使用道具 举报

5

主题

33

帖子

88

积分

超级版主

Rank: 8Rank: 8

威望
0
经验
55
贡献
0
发表于 2015-11-30 18:10:20 | 显示全部楼层
LH_Mouse 发表于 2015-11-30 17:13
ヲ实在不想看 boost::variant 是如何实现的,因为 boost 的实现通常都烂(不过比各路其他 C艹库依然强太多 ...

boost的玩意儿不山寨一个能用?八成编译卡翔。(剩下的基本std里都有。)
回复 支持 反对

使用道具 举报

5

主题

33

帖子

88

积分

超级版主

Rank: 8Rank: 8

威望
0
经验
55
贡献
0
发表于 2015-11-30 18:12:14 | 显示全部楼层
LH_Mouse 发表于 2015-11-30 17:13
ヲ实在不想看 boost::variant 是如何实现的,因为 boost 的实现通常都烂(不过比各路其他 C艹库依然强太多 ...

实现检查了?
回复 支持 反对

使用道具 举报

8

主题

64

帖子

269

积分

超级版主

Rank: 8Rank: 8

威望
12
经验
169
贡献
12
 楼主| 发表于 2015-11-30 19:06:45 | 显示全部楼层
本帖最后由 nadesico19 于 2015-11-30 19:14 编辑
LH_Mouse 发表于 2015-11-30 17:13
ヲ实在不想看 boost::variant 是如何实现的,因为 boost 的实现通常都烂(不过比各路其他 C艹库依然强太多 ...

没有波波如何拜吱!

虽然boost版中绕来绕去,实质上也是which_与which()做比较之后直接static_cast,个人觉得更好点。(另,boost版内部用的是aligned_storage)其实俺觉得耗吱的实现更加简洁明快,看着舒服!


岩川黑鬼 发表于 2015-11-30 17:13
我原来以为抚子是只写C的……
看着确实不错。

其实工作上除了前五年是java厨以外,后来都是c艹来着。只是跟帝球这种只通淫兽语的谈c艹实在是没有乐趣,所以不咋提233333


这位兄台以前的ID是什么?


幻の上帝 发表于 2015-11-30 18:10
boost的玩意儿不山寨一个能用?八成编译卡翔。(剩下的基本std里都有。)

YS库要快得多?
回复 支持 反对

使用道具 举报

3

主题

20

帖子

202

积分

超级版主

mikonmikonmi

Rank: 8Rank: 8

威望
4
经验
170
贡献
4
发表于 2015-11-30 19:43:23 | 显示全部楼层
nadesico19 发表于 2015-11-30 19:06
没有波波如何拜吱!

虽然boost版中绕来绕去,实质上也是which_与which()做比较之后直接static_cast,个人 ...

LYP君是小耗ISO/IEC C艹群里见过的,贴吧不知道……
哦对,他似乎偶尔去百度军大衣吧
沿海征收头GAY骨
回复 支持 反对

使用道具 举报

10

主题

108

帖子

469

积分

超级版主

RA2DIY 特别行政区行政长官

Rank: 8Rank: 8

威望
4
经验
350
贡献
3
发表于 2015-11-30 19:48:17 这篇帖子是使用手机发表的! | 显示全部楼层
幻の上帝 发表于 2015-11-30 18:12
实现检查了?

连续的帖子自己用编辑帖子的功能合并掉。
回复 支持 反对

使用道具 举报

1

主题

10

帖子

44

积分

新手上路

Rank: 1

威望
0
经验
34
贡献
0
发表于 2015-11-30 20:38:21 | 显示全部楼层
这个头像难道是你
回复 支持 反对

使用道具 举报

1

主题

16

帖子

73

积分

超级版主

Rank: 8Rank: 8

威望
0
经验
57
贡献
0
发表于 2015-11-30 21:05:04 | 显示全部楼层
头像不错, 小鲜肉啊
回复 支持 反对

使用道具 举报

5

主题

33

帖子

88

积分

超级版主

Rank: 8Rank: 8

威望
0
经验
55
贡献
0
发表于 2015-11-30 21:57:14 | 显示全部楼层
LH_Mouse 发表于 2015-11-30 19:48
连续的帖子自己用编辑帖子的功能合并掉。

哪来的合并,手动?
楼层号能保持不变?
回复 支持 反对

使用道具 举报

8

主题

64

帖子

269

积分

超级版主

Rank: 8Rank: 8

威望
12
经验
169
贡献
12
 楼主| 发表于 2015-11-30 22:11:13 | 显示全部楼层
本帖最后由 nadesico19 于 2015-11-30 22:16 编辑
yukisora 发表于 2015-11-30 20:38
这个头像难道是你





已然老去


幻の上帝 发表于 2015-11-30 21:57
哪来的合并,手动?
楼层号能保持不变?

删掉之后,后面的楼层号会依次前移。主要就是引用回复的时候不大方便,看有没有啥好主意?

点评

To LH_Mouse: 这个好,再来个颜文字d( ̄(エ) ̄d)☆very good☆(b ̄(エ) ̄)b  发表于 2015-12-1 08:44
看看楼中楼如何?  发表于 2015-12-1 00:15
回复 支持 反对

使用道具 举报

10

主题

108

帖子

469

积分

超级版主

RA2DIY 特别行政区行政长官

Rank: 8Rank: 8

威望
4
经验
350
贡献
3
发表于 2015-11-30 22:27:51 | 显示全部楼层
幻の上帝 发表于 2015-11-30 21:57
哪来的合并,手动?
楼层号能保持不变?

楼层号又无所谓。

不合并占地方碍眼。
We will prevail!! www.lhmouse.com
回复 支持 反对

使用道具 举报

5

主题

33

帖子

88

积分

超级版主

Rank: 8Rank: 8

威望
0
经验
55
贡献
0
发表于 2015-11-30 23:52:58 | 显示全部楼层
LH_Mouse 发表于 2015-11-30 22:27
楼层号又无所谓。

不合并占地方碍眼。

全文引用比引用楼层号占地方多了。
回复 支持 反对

使用道具 举报

10

主题

108

帖子

469

积分

超级版主

RA2DIY 特别行政区行政长官

Rank: 8Rank: 8

威望
4
经验
350
贡献
3
发表于 2015-12-1 00:06:08 | 显示全部楼层
本帖最后由 LH_Mouse 于 2015-12-1 00:15 编辑
幻の上帝 发表于 2015-11-30 23:52
全文引用比引用楼层号占地方多了。

我重复一次,论坛不是贴吧,不要以为什么地方都跟贴吧那么智障。

nadesico19

删掉之后,后面的楼层号会依次前移。主要就是引用回复的时候不大方便,看有没有啥好主意?
可以开楼中楼试一下。

点评

萧の十三郎 不可以。  发表于 2015-12-3 13:48
楼中楼不能指定回复对象?  发表于 2015-12-3 13:24
手机端功能怎么做得比逗比贴吧还烂。。。这个楼中楼也不好单独移动吧。像这层楼跑题那么远就该单独移个主题出来了,不是自己撸就破事多。  发表于 2015-12-1 14:22
引用楼层号跟贴不贴吧无关。就是因为脑补到处语义噪音的设计,拍黄片之类撸的所谓论坛比早年(广告狗滚粗的)贴吧体验差,更别提早期的BBS了。  发表于 2015-12-1 14:19
楼中楼@其他人能收到消息么。还有为啥评分><抽风而这个点评正常,discuz的锅?  发表于 2015-12-1 14:13
We will prevail!! www.lhmouse.com
回复 支持 反对

使用道具 举报

0

主题

10

帖子

45

积分

新手上路

Rank: 1

威望
1
经验
32
贡献
1
发表于 2015-12-3 12:24:05 | 显示全部楼层
岩川黑鬼 发表于 2015-11-30 19:43
LYP君是小耗ISO/IEC C艹群里见过的,贴吧不知道……
哦对,他似乎偶尔去百度军大衣吧 ...

噗噗噗!!!

点评

被尾随了wwwww  发表于 2015-12-3 15:17
回复 支持 反对

使用道具 举报

您需要登录后才可以回帖 登录 | 立即注册

本版积分规则

Archiver|手机版|小黑屋|ISO/IEC C++ China Unofficial    

GMT+8, 2017-9-24 05:37 , Processed in 0.174014 second(s), 36 queries , Xcache On.

Powered by Discuz! X3.2

© 2001-2013 Comsenz Inc.

快速回复 返回顶部 返回列表