• 5961阅读
  • 11回复

[提问]这段话该如何理解 [复制链接]

上一主题 下一主题
离线justwake
 

只看楼主 倒序阅读 楼主  发表于: 2013-07-01
来自:QT高级编程 一书

构造函数中:
  1. createContextMenu();
  2. QTimer::singShot(0,this,SLOT(requestXml()));


书上有此段话:
  1. 我们已经简单、直接地调用了requestXml(),但考虑到编程风格,还是建议尽量少用在各个构造函数中构造一个对象的"create"方法【此处不理解:这个create方法说的是QTimer对象的singleShot方法吗】
  2. 也尽量少用单触发器来调用那些构造后初始化方法【此处不理解:这个构造后初始化方法是谁,requestXml?】


离线dbzhang800

只看该作者 1楼 发表于: 2013-07-01
尽量少用在各个构造函数中构造一个对象的"create"方法【此处不理解:这个create方法说的是QTimer对象的singleShot方法吗】

说的是 createContextMenu();

也尽量少用单触发器来调用那些构造后初始化方法【此处不理解:这个构造后初始化方法是谁,requestXml?】

对,requestXml() 在当前构造函数结束后被调用
离线justwake

只看该作者 2楼 发表于: 2013-07-01
回 1楼(dbzhang800) 的帖子
第二个  不建议的原因是因为singleShot执行会带来初始化未完成  这个我能理解了!

第一个不理解  为什么不建议这样用  有什么弊端吗
是因为以后的connect函数吗? 如果是这样  connect函数应该会放在create方法里面啊  这个不理解  求明示!!!
离线dbzhang800

只看该作者 3楼 发表于: 2013-07-01
额,手上没有这本书的中文版,翻了下原版。

你贴的是这一段对应的内容么?

We could have simply called requestXml()  directly, but as a matter of style we
prefer to restrict ourselves to calling “create” methods that contribute to the
construction of an object in constructors, and to call any post-construction
initializing method using a single shot timer. This ensures that by the time
the initializing method is called, the object is fully constructed. This means
that the initializing method can access any member variable or method—
something that is not guaranteed to be safe during construction.

但是,这儿的意思和你一开始贴的并不一致。
离线justwake

只看该作者 4楼 发表于: 2013-07-01
回 3楼(dbzhang800) 的帖子
一开始贴的? 我就发了一次帖子 没有修改啊
离线dbzhang800

只看该作者 5楼 发表于: 2013-07-01
Re:回 3楼(dbzhang800) 的帖子
引用第4楼justwake于2013-07-01 12:02发表的 回 3楼(dbzhang800) 的帖子 :
一开始贴的? 我就发了一次帖子 没有修改啊

恩,我是说,英文原文和你顶楼引用的内容不一样。很可能是翻译错误
离线justwake

只看该作者 6楼 发表于: 2013-07-01
回 5楼(dbzhang800) 的帖子
我这是中文版的
这一段的翻译如下:
我们已经简单、直接地调用了requestXml(),但考虑到编程风格,还是建议尽量少用在各个构造函数中构造一个对象的“create”方法,也尽量少用单触发器来调用那些构造后初始化方法(post-construction initializing method)。这样做可确保在调用初始化方法时,对象已经完全构造好了。这意味着初始化方法可以访问任何的成员变量或方法,但在对象的构造过程中这样做则不一定安全。

你看哪个地方翻译的不合适  我就是不理解哪个编程风格处  是什么意思?
离线dbzhang800

只看该作者 7楼 发表于: 2013-07-01
这段翻译是有问题的,原文大意如下:

我们本可以简单、直接地调用requestXml(), 但考虑到编程风格,我们倾向于在构造函数中只调用哪些对对象构造有贡献的"create"方法,并倾向于通过单触发的定时器来调用那些构造后初始化方法。这样做...

离线justwake

只看该作者 8楼 发表于: 2013-07-01
回 7楼(dbzhang800) 的帖子
并倾向于通过单触发的定时器来调用那些构造后初始化方法

那这句话是不是和以后的内容冲突    
singleShot(0,this,SLOT(reuqestXml());
这句代码不是有风险在requestXml构造完成前执行吗?
离线dbzhang800

只看该作者 9楼 发表于: 2013-07-01
不冲突。
这行代码的作用是,一旦当前构造函数结束,且事件循环无事可做时,就会调用你的 requestXml()

-------------------
题外:对Qt新手来说,建议跳过本书第一章,以及第一章译者翻译的其他章节。另外,多看Qt自带的Manual
离线justwake

只看该作者 10楼 发表于: 2013-07-01
回 9楼(dbzhang800) 的帖子
好吧  谢谢!
离线roywillow

只看该作者 11楼 发表于: 2013-07-01
引用第9楼dbzhang800于2013-07-01 16:50发表的  :
不冲突。
这行代码的作用是,一旦当前构造函数结束,且事件循环无事可做时,就会调用你的 requestXml()
-------------------
题外:对Qt新手来说,建议跳过本书第一章,以及第一章译者翻译的其他章节。另外,多看Qt自带的Manual


新手的话我感觉看这本书都不太合适吧
我啃了几页之后发现有点晦涩然后就丢到一边去了……
专业维修核潜艇,回收二手航母、二手航天飞机,大修核反应堆,拆洗导弹发动机更换机油,无人侦察机手动挡改自动,航天飞机保养换三滤,飞碟外太空年检 ,各型号导弹加装迎宾踏板,高空作业擦洗卫星表面除尘、打蜡及抛光,东风全系列巡航导弹。并提供原子对撞机。量大从优,有正规发票。
快速回复
限100 字节
 
上一个 下一个